包管理器JavaScript
like npm
and yarn
use a package.json
指定“顶级”依赖项,并创建一个锁定文件 https://docs.npmjs.com/files/package-locks跟踪特定版本all包(即顶级and结果安装的子级依赖项)。
除此之外package.json
允许我们区分顶级依赖关系的类型,例如生产 and 发展.
For Python
,另一方面,我们有pip
。我想pip
相当于一个lock
-file 将是以下结果pip freeze > requirements.txt
.
但是,如果您只维护这一个requirements.txt
文件中,很难区分顶级和子级依赖关系(例如,您需要pipdeptree -r
找出这些)。如果您想删除或更改顶级依赖项,这可能会非常痛苦,因为很容易留下孤立的包(据我所知,pip
不删除子依赖项 https://stackoverflow.com/a/10284948当你pip uninstall
一套)。
现在,我想知道:是否有一些约定来处理不同类型的这些requirements
文件并区分顶级和子级依赖关系pip
?
例如,我可以想象有一个requirements-prod.txt
其中仅包含生产环境的顶级要求,作为(简化的)等价物package.json
, and a requirements-prod.lock
,其中包含输出pip freeze
,并充当我的lock
-文件。另外我可以有一个requirements-dev.txt
用于开发依赖项等等。
我想知道这是否是可行的方法,或者是否有更好的方法。
附注可以问同样的问题conda
's environment.yml
.
今天至少有三个不错的选择:
-
Poetry https://python-poetry.org/ uses pyproject.toml and poetry.lock files https://python-poetry.org/docs/basic-usage/#installing-with-poetrylock,与此大致相同package.json
和锁定文件在 JavaScript 世界中工作。
这是我现在的首选解决方案。
-
Pipenv https://github.com/pypa/pipenv uses Pipfile and Pipfile.lock https://github.com/pypa/pipfile,也很像您描述的 JavaScript 文件。
Poetry 和 Pipenv 所做的不仅仅是依赖管理。他们还可以开箱即用地为您的项目创建和维护虚拟环境。
-
pip-tools https://github.com/jazzband/pip-tools提供pip-compile
and pip-sync
命令。这里,requirements.in
列出您的直接依赖项,通常具有宽松的版本约束和pip-compile
产生锁定requirements.txt
文件来自你的.in
files.
这曾经是我的首选解决方案。它是向后兼容的(生成的requirements.txt
可以通过处理pip
)和pip-sync
工具确保 virtualenv 与锁定版本完全匹配,删除“锁定”文件中没有的内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)