gpt4 book ai didi

python - 相当于 `package.json' 和 `package-lock.json` 的 `pip`

转载 作者:太空宇宙 更新时间:2023-11-03 15:40:29 25 4
gpt4 key购买 nike

JavaScript 的包管理器,如 npmyarn 使用 package.json 来指定“顶层” ' 依赖项,并创建一个 lock-file跟踪作为结果安装的所有包的特定版本(即顶级子级依赖项)。

此外,package.json 允许我们区分顶级依赖项的类型,例如productiondevelopment .

另一方面,对于 Python,我们有 pip。我想 pip 等同于 lock 文件将是 pip freeze > requirements.txt 的结果。

但是,如果您只维护一个 requirements.txt 文件,则很难区分顶级和子级依赖项(您需要例如 pipdeptree -r 来解决这些问题)。如果您想删除或更改顶级依赖项,这可能是一个真正的痛苦,因为很容易留下孤立的包(据我所知,pip does not remove sub-dependencies 当您 pip uninstall 一个包)。

现在,我想知道:是否有一些约定来处理这些需求文件的不同类型,并用区分顶级和子级依赖关系 pip ?

例如,我可以想象有一个 requirements-prod.txt 只包含生产环境的顶级需求,作为 package.json< 的(简化)等价物requirements-prod.lock,它包含 pip freeze 的输出,并作为我的 lock 文件。此外,我还可以有一个用于开发依赖项的 requirements-dev.txt,等等。

我想知道这是不是要走的路,或者是否有更好的方法。

附注condaenvironment.yml 可能会问同样的问题。

最佳答案

目前至少有三个不错的选择:

  1. Poetry使用 pyproject.toml and poetry.lock files ,与 package.json 的方式大致相同和锁定文件在 JavaScript 世界中工作。

    现在这是我的首选解决方案。

  2. Pipenv使用 Pipfile and Pipfile.lock ,也很像您描述 JavaScript 文件。

Poetry 和 Pipenv 所做的不仅仅是依赖管理。他们还开箱即用地为您的项目创建和维护虚拟环境。

  1. pip-tools 提供 pip-compilepip-sync命令。在这里,requirements.in列出您的直接依赖项,通常具有松散的版本约束和 pip-compile生成锁定 requirements.txt来自您的 .in 的文件文件。

    这曾经是我的首选解决方案。它向后兼容(生成的 requirements.txt 可以由 pip 处理)和 pip-sync工具确保 virtualenv 与锁定版本完全匹配,删除不在“锁定”文件中的内容。

关于python - 相当于 `package.json' 和 `package-lock.json` 的 `pip`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52665596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com