- 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/
我已经在我的电脑上安装了 node.js,当我运行这个命令时它给了我这个错误,我该怎么办??? npm WARN config global `--global`, `--local` are dep
在 PHP 中,我想知道 GLOBAL 和 GLOBALS 之间的区别。 一些例子: print_r($GLOBALS); 最佳答案 这是与同一事物相关的两个不同事物:全局变量。 $GLOBALS -
在某些 SCSS 文件中,我看到以下内容: :global { /* ... */ } 不知道是SCSS特性还是CSS特性。我尝试搜索它,但第一眼找不到任何好的结果。 最佳答案 此运算符用于 CS
我正在考虑向 JSON 添加注释并找到 this script在处理使 JSON 有效之前将它们去除。我只是想了解如何使 JSON.minify() 函数可用? 开始于 (function(globa
在我的 React 应用程序中,我尝试使用 react-widgets package 中包含的 DateTimePicker 组件.我还通过 reactstrap 使用 Bootstrap 4 组件
全局变量的作用域是所有文件,而静态全局变量的作用域只是它所在的文件被宣布。为什么这样? 全局或静态全局变量存储在内存中的什么位置? 最佳答案 有一些混淆,因为 C 中的 static 可能意味着两种不
我尝试从 Marko 组件访问全局变量,但收到 Uncaught ReferenceError: out is not Defined。 class { onClick(event) {
这个 fiddle 在 IE 和 FF 中返回正确的值“5,5”,但在 Chrome 中它返回“5.5” fiddle :http://jsfiddle.net/4tvSH/ Globalize.cu
我对 python 很陌生,我尝试制作一个简单的 GUI 程序。但是,我遇到了一个“问题”,确切地说是一个警告,上面写着:“m”未在全局范围内定义(Python(变量未定义全局))。 我知道如果你想在
将变量初始化为 global var 或调用 globals().update(var) 有什么区别。 谢谢 最佳答案 当你说 global var 您是在告诉 Python var 与在全局上下文中
我正在开发 ASP.NET Web 应用程序,对于未处理的异常,我正在使用Global.asax 文件 我在其中编写了将错误日志写为 的逻辑 Sub Application_Error(ByVal s
这是我的第一篇 StackOverflow 帖子。提前致谢!我在这里找到了很多答案,但在网络上的任何地方都找不到有关我当前问题的任何信息。 =( 我有一个 C# 服务,我已经使用 Visual Stu
问题: 我正在尝试将对我的 MongoDB 数据库的查询结果有效地分配给全局数组。我基本上尝试将对全局数组的引用存储在一个数组中,以便我可以将 for 循环中的查询结果分配给所有这些引用。 这似乎是不
我想看看 Node.js 中 global.process 的构造函数是否存储在任何地方。 例如,在网络中,构造函数很容易获得。例如,window 的构造函数是window.Window。所有构造函数
Tell me about the difference between global.asax and global.asax.cs ? 和 If i click the both file in
全局对象作为顶级词法环境(如果你愿意的话,在作用域链的顶部)。这意味着可以通过直接引用(如变量)访问全局属性: // global code this.foo = 1; // creat
如何修复 Depricated 警告消息 (node:6136) DeprecationWarning: 'GLOBAL' is deprecated, use 'global' 在我的代码中,我使用
在我的本地发布文件夹中,我有 Global.asax 和 Global.asax.cs,其中 Global.asax 未更新(日期为一个月前)和 Global.asax .cs 已更新。 我检查了 G
我有下面的代码,自动生成: $ react-native init RepeatAloud 应用程序.tsx /** * Sample React Native App * https://git
在 Node-red 仪表板上,我想以不同的流量显示相机流。背后的想法是在每个流上显示相机。 为了显示相机流,我使用了 iFrame。一切正常,但我必须为每个单独的 iFrame 提供流的 URL。
我是一名优秀的程序员,十分优秀!