等价于 `package.json' 和 `package-lock.json` for `pip`
Equivalent of `package.json' and `package-lock.json` for `pip`
JavaScript
的包管理器,如 npm
和 yarn
使用 package.json
指定 'top-level' 依赖项,并创建 lock-file跟踪作为结果安装的所有包的特定版本(即顶级和子级依赖项)。
此外,package.json
允许我们区分顶级依赖的类型,例如production和development.
另一方面,对于Python
,我们有pip
。我想 lock
文件的 pip
等价物是 pip freeze > requirements.txt
的结果。
但是,如果您只维护这个 requirements.txt
文件,则很难区分顶级和子级依赖项(您需要 pipdeptree -r
来弄清楚) .如果您想删除或更改顶级依赖项,这可能是一个真正的痛苦,因为很容易留下孤立的包(据我所知,pip
does not remove sub-dependencies 当您 pip uninstall
一个包)。
现在,我想知道:是否有一些约定来处理这些requirements
文件的不同类型并区分顶级和子级依赖关系pip
?
例如,我可以想象有一个 requirements-prod.txt
只包含生产环境的顶级要求,作为 package.json
的(简化)等价物,和一个 requirements-prod.lock
,其中包含 pip freeze
的输出,并充当我的 lock
文件。此外,我可以有一个 requirements-dev.txt
用于开发依赖项,等等。
我想知道这是不是要走的路,或者是否有更好的方法。
p.s。 conda
的 environment.yml
.
也可以问同样的问题
今天至少有三个不错的选择:
Poetry uses pyproject.toml
and poetry.lock
files,与 package.json
和锁定文件在 JavaScript 世界中的工作方式非常相似。
现在这是我的首选解决方案。
Pipenv uses Pipfile
and Pipfile.lock
,也很像你描述的 JavaScript 文件。
Poetry 和 Pipenv 都不仅仅是依赖管理。开箱即用,他们还为您的项目创建和维护虚拟环境。
pip-tools
提供 pip-compile
和 pip-sync
命令。在这里,requirements.in
列出了您的直接依赖项,通常具有松散的版本限制,并且 pip-compile
从您的 .in
文件中生成锁定的 requirements.txt
文件。
这曾经是我的首选解决方案。它是向后兼容的(生成的 requirements.txt
可以由 pip
处理)并且 pip-sync
工具确保 virtualenv 与锁定版本完全匹配,删除不在你的“锁”中的东西" 文件。
JavaScript
的包管理器,如 npm
和 yarn
使用 package.json
指定 'top-level' 依赖项,并创建 lock-file跟踪作为结果安装的所有包的特定版本(即顶级和子级依赖项)。
此外,package.json
允许我们区分顶级依赖的类型,例如production和development.
另一方面,对于Python
,我们有pip
。我想 lock
文件的 pip
等价物是 pip freeze > requirements.txt
的结果。
但是,如果您只维护这个 requirements.txt
文件,则很难区分顶级和子级依赖项(您需要 pipdeptree -r
来弄清楚) .如果您想删除或更改顶级依赖项,这可能是一个真正的痛苦,因为很容易留下孤立的包(据我所知,pip
does not remove sub-dependencies 当您 pip uninstall
一个包)。
现在,我想知道:是否有一些约定来处理这些requirements
文件的不同类型并区分顶级和子级依赖关系pip
?
例如,我可以想象有一个 requirements-prod.txt
只包含生产环境的顶级要求,作为 package.json
的(简化)等价物,和一个 requirements-prod.lock
,其中包含 pip freeze
的输出,并充当我的 lock
文件。此外,我可以有一个 requirements-dev.txt
用于开发依赖项,等等。
我想知道这是不是要走的路,或者是否有更好的方法。
p.s。 conda
的 environment.yml
.
今天至少有三个不错的选择:
Poetry uses
pyproject.toml
andpoetry.lock
files,与package.json
和锁定文件在 JavaScript 世界中的工作方式非常相似。现在这是我的首选解决方案。
Pipenv uses
Pipfile
andPipfile.lock
,也很像你描述的 JavaScript 文件。
Poetry 和 Pipenv 都不仅仅是依赖管理。开箱即用,他们还为您的项目创建和维护虚拟环境。
pip-tools
提供pip-compile
和pip-sync
命令。在这里,requirements.in
列出了您的直接依赖项,通常具有松散的版本限制,并且pip-compile
从您的.in
文件中生成锁定的requirements.txt
文件。这曾经是我的首选解决方案。它是向后兼容的(生成的
requirements.txt
可以由pip
处理)并且pip-sync
工具确保 virtualenv 与锁定版本完全匹配,删除不在你的“锁”中的东西" 文件。