【发布时间】:2019-03-10 23:02:27
【问题描述】:
JavaScript 的包管理器如 npm 和 yarn 使用 package.json 指定“顶级”依赖项,并创建 lock-file 以跟踪 all 作为结果安装的包(即顶级和子级依赖项)。
此外,package.json 允许我们区分顶级依赖项的类型,例如 production 和 development。
另一方面,对于Python,我们有pip。我想pip 等效于lock-文件将是pip freeze > requirements.txt 的结果。
但是,如果您只维护这个单一的 requirements.txt 文件,则很难区分顶级和子级别的依赖关系(例如,您需要 pipdeptree -r 来弄清楚这些)。如果您想删除或更改顶级依赖项,这可能是一个真正的痛苦,因为很容易留下孤立的包(据我所知,pipdoes not remove sub-dependencies 当你 pip uninstall 一个包时)。
现在,我想知道:是否有一些约定来处理这些requirements 文件的不同类型并使用pip 区分顶级和子级依赖关系?
例如,我可以想象有一个requirements-prod.txt,它只包含生产环境的顶级需求,作为package.json 的(简化)等价物,还有一个requirements-prod.lock,它包含@ 的输出987654343@,并充当我的lock 文件。此外,我可以有一个requirements-dev.txt 用于开发依赖项,依此类推。
我想知道这是要走的路,还是有更好的方法。
附言对于conda 的environment.yml 也可以提出同样的问题。
【问题讨论】:
标签: python pip dependencies conda requirements.txt