到目前为止,我已经测试了各种方法来管理 Python中的项目依赖项:
我对所有这些问题(除了1.)的问题在于我的硬盘空间填充速度非常快:我不是开发人员,我使用Python进行日常工作.因此,我有数百个小项目都在做他们的事情.不幸的是,项目的80%,我需要"大"套餐:numpy,pandas,scipy,matplotlib-你的名字.典型的小项目大约有1000到2000行代码,但在venv/virtualenv/pipenv中有800MB的包依赖性.实际上我有大约100多GB的硬盘充满了python虚拟依赖项.
而且,在每个虚拟环境中安装所有这些都需要时间.我在Windows中工作时,许多包不能被轻易从Windows安装点子:Shapely,Fiona,GDAL-我需要预编译的车轮克里斯托夫Gohlke.这很容易,但它会破坏大多数工作流程(例如,pip install -r requirements.txt或pipenv install来自pipfile).我觉得我40%安装/更新包依赖,只有60%的时间编写代码.此外,没有这些包管理真正与出版和测试代码的帮助,所以我需要其他工具如setuptools,tox,semantic-release,twine...
我和同事们聊过,但他们都面临着同样的问题,似乎没有人能找到真正的解决方案.我在想,如果有有一些包,例如,你在大多数项目中,全球范围内安装使用的那些的方法-例如numpy,pandas,scipy,matplotlib将在PIP安装C:\Python36\Lib\site-packages或使用conda中C:\ProgramData\Miniconda3\Lib\site-packages-这些都是非常发达的包不经常打破一切.如果,我想在我的项目中很快解决这个问题.
其他的事情会去当地的virtualenv文件夹-我很想我的当前工作流从移动pipenv到conda.
这种方法有意义吗?至少最近在python中有很多开发,也许还有一些我还没看到的东西.是否有任何的最佳实践指导设置如何文件这样的混合全局-局部环境,例如,如何维护setup.py,requirements.txt或pyproject.toml通过Gitlab,Github上共享等发展项目?有什么陷阱/警告?
克里斯·沃里克(Chris Warrick)的这篇精彩博文也完全解释了这一点.