- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
到目前为止,我已经测试了多种方法来用在Python中管理我的项目依赖项:
numpy
,
pandas
,
scipy
,
matplotlib
-命名。一个典型的小型项目大约需要1000至2000行代码,但是在venv/virtualenv/pipenv中具有800MB的程序包依赖项。实际上,我的HDD大约有100+ GB,充满了python虚拟依赖项。
Shapely
,
Fiona
和
GDAL
-我需要从
Christoph Gohlke预编译的滚轮。这很容易,但会中断大多数工作流程(例如pipfile中的
pip install -r requirements.txt
或
pipenv install
)。我觉得我40%的人正在安装/更新软件包的依赖关系,而我只有60%的时间在编写代码。此外,这些软件包管理器都无法真正帮助发布和测试代码,因此我需要其他工具,例如
setuptools
,
tox
,
semantic-release
,
twine
...
numpy
,
pandas
,
scipy
,
matplotlib
会与ipt一起安装在
C:\Python36\Lib\site-packages
中,或者与
conda
一起安装在
C:\ProgramData\Miniconda3\Lib\site-packages
中-这些是开发良好的软件包,通常不会破坏事情。如果可以,我想在我的项目中尽快解决该问题。
pipenv
移到
conda
。
setup.py
,
requirements.txt
或
pyproject.toml
通过Gitlab,Github等共享开发项目?有哪些陷阱/陷阱?
conda env create -f myenv.yml
在每个平台上都相同pip
并使用pip从pypi添加软件包。提示:conda update --all -n myenv -c conda-forge
将仅更新conda中的软件包,而不更新与pip
一起安装的软件包。 Pip安装的依赖项必须使用pip install pack_name --upgrade
手动更新。请注意,在conda中使用pip安装软件包是一种紧急解决方案,通常应为avoided environment.yml
,指定conda channel 优先级,conda中的软件包和pip Miniconda3 Docker
在Gitlab持续集成中设置开发环境-这使得测试运行非常简单明了yml
中的
jupyter_env
,在这里jupyter实验室和我的大多数科学软件包已安装(numpy,geos,pandas scipy等)-每当需要使用这些工具时,我都会将其激活,我可以将这些工具保持在一个单一的位置。为了开发特定的程序包,我有一些仅用于程序包相关性的环境(例如packe1_env
)。我总体上大约有10个环境,这是可以控制的。一些通用工具安装在基本conda环境中,例如pylint
。警告:要在VS Code中使pylint/pycodestyle/autopep8等工作(例如),必须将其安装到包含python-code-dependencies的同一个环境中-否则,您将收到 Unresolved 导入警告conda update -n base conda
保持最新状态,而我的envs每周使用conda update --all -n myenv -c conda-forge
进行更新,就像一种魅力! --stack
标志(从2019-02-07开始),可用于堆叠conda环境,例如conda activate my_big_env
然后conda activate --stack dev_tools_env
允许在许多环境中提供一些通用软件包。但是,请谨慎使用-我发现代码linters(例如pylint)必须与lint conda
(WSL)中的Windows Subsystem for Linux
,这又大大改善了我的工作流程:程序包安装速度更快,我可以在直接连接到WSL的Windows中使用VS Code Insiders进行操作,并且错误更少Linux环境中的python软件包。 conda config --env --set channel_priority strict
-这只会安装兼容的版本。使用很少和很少的软件包组合,可能会导致无法解决的依赖项冲突(即无法创建env)。在这种情况下,我通常为实验开发创建较小的env,将较少的程序包和channel_priority
设置为flexible
(默认设置)。有时,存在易于解决的包子集,例如geoviews-core
(而不是geoviews
)或matplotlib-base
(而不是matplotlib
)。对于那些strict
无法解决的实验性环境,尝试较低的python版本也是一个好方法,例如conda create -n jupyter_exp_env python=3.6 -c conda-forge
。最后手段是使用pip安装软件包,这避免了conda的软件包解析器(但可能会导致不稳定的环境和其他问题,已警告您!)。确保首先在环境中明确安装pip
。 最佳答案
问题
您列出了许多问题,没有一种方法可以完全解决:
'I need the "big" packages: numpy, pandas, scipy, matplotlib... Virtually I have about 100+ GB of my HDD filled with python virtual dependencies'
... installing all of these in each virtual environment takes time
... none of these package managers really help with publishing & testing code ...
I am tempted to move my current workflow from pipenv to conda.
I was wondering if there is an approach to have some packages, e.g. the ones you use in most projects, installed globally ... Other things would go in local virtualenv-folders
workenv
。将此视为您的“全局”环境,可以完成大部分日常工作。
> conda create -n workenv python=3.7 numpy pandas matplotblib scipy
> activate workenv
(workenv)>
> conda create --name testenv --clone workenv
> activate testenv
(testenv)> pip install pint
requirements.txt
文件以最少的软件包创建新环境
requirements.txt
的文件
environment.yaml
中。 (可选)制作脚本以在每个环境中运行此命令。参见
docs。将来通过此文件创建环境:
> conda create --name testenv --file environment.yml
> activate testenv
(testenv)> conda list
pyproject.toml
文件而引起关注(请参阅作者B. Cannon撰写的相关
flit
)。诸如
poetry
或
pyproject.toml
之类的打包工具已经采用了这种现代惯例来进行发行并将其发布到服务器或打包索引(PyPI)。
setup.py
概念试图摆脱对
setuptools
的特定依赖的传统
pipenv
文件。
poetry
和
here之类的工具具有独特的现代方法,可通过“锁定”文件解决依赖性问题。该文件允许您跟踪和重现依赖关系图的状态,这是迄今为止Python打包领域中的新颖内容(请参阅Pipfile与setup.py
interview上的更多信息)。而且,尽管我尚未测试这些声明的范围,但有一些声明称您仍可以将这些工具与conda结合使用。锁定文件尚未标准化,但据核心开发人员B. Canon称,在python封装的 future (约33m)中,
twine表示:“我想带我们到那里。”
pipenv
:用于部署和制作Pipfile.lock
poetry
:用于部署和制作poetry.lock
pipenv
:通过pipenv install -e.
开发并使用 flit
poetry
:自动打包和发布pyproject.toml
:自动打包和发布pipenv
与pip
,37m)和开发环境。 关于python - Python依赖 hell : A compromise between virtualenv and global dependencies?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54475042/
相当优秀的compromise.js除其他外,还提供匹配功能。 我正在努力让它适用于动词的变体: var nlp = require('compromise'); var sentences = [
似乎禁止从 EJB 读取文件,如此链接中所述: http://java.sun.com/blueprints/qanda/ejb_tier/restrictions.html#file_access
所以我看到了这个很棒的natural language processing in javascript我想知道如何进行基本的语境化? 比方说,我想抓紧时间。 通过做这样的事情: var word =
到目前为止,我已经测试了多种方法来用在Python中管理我的项目依赖项: 使用pip全局安装所有内容(节省空间,但迟早会给您带来麻烦) pip和venv或virtualenv(管理起来有点麻烦,但在许
我正在将 Socket.IO 用于 NodeJS Web 应用程序。该页面通过 SSL 提供服务,我的连接如下所示: var socket = io.connect('/'); 这几乎适用于除 IE9
我正在开发一个具有许多仅HTTPS区域的电子商务应用程序。此特定错误仅在IE中发生(至少10个,还没有尝试过其他错误),并且仅在整个应用程序中的一个HTTPS页面上发生。 从研究中,我收集到这是IE的
我是 Wordpress 插件的作者,该插件允许用户使用 Facebook 登录他们的博客;它使用旧的 REST API 来引入登录按钮。通常,包括 API 是通过以下方式完成的: 但是,在 Fac
我正在使用 Sqlite.swift 当我在模拟器中重新启动应用程序时,我想删除现有数据库并创建新数据库。 (因为初始化数据库......我改变了数据库列很多。) 但有警告信息。 [logging]
我是一名优秀的程序员,十分优秀!