编程语言
首页 > 编程语言> > python-等价于`pip`的package.json和package-lock.json

python-等价于`pip`的package.json和package-lock.json

作者:互联网

适用于JavaScript的软件包管理器(例如npm和yarn)使用package.json来指定“顶级”依赖项,并创建一个lock-file来跟踪已安装的所有软件包的特定版本(即顶级和子级依赖项)结果是.

另外,package.json允许我们区分顶级依赖类型,例如生产和开发.

另一方面,对于Python,我们有pip.我想锁定文件的pip等效项是pip Frozen> requirements.txt.

但是,如果仅维护此单个requirements.txt文件,则很难区分顶级和子级别的依赖项(您将需要例如pipdeptree -r来找出这些依赖项).如果您想删除或更改顶级依赖项,这可能是一个真正的痛苦,因为很容易留下孤立的软件包(据我所知,当您通过pip卸载软件包时,是pip does not remove sub-dependencies).

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

例如,我可以想象有一个requirements-prod.txt文件,它仅包含生产环境的顶层需求,作为package.json的(简化的)等价物,以及一个requirements-prod.lock文件,其中包含的输出. pip冻结,并充当我的锁定文件.另外,我可以拥有一个用于开发依赖项的requirements-dev.txt,依此类推.

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

ps.对于conda的environment.yml,可能会问相同的问题.

解决方法:

今天至少有两个不错的选择:

> pipenv使用Pipfile and Pipfile.lock类似于描述类似的JavaScript文件的方式. Pipenv比pip是“更大”的工具,从某种意义上说,它还可以创建和管理virtualenvs.

这可能是当今最流行的选项,并且几乎可以肯定,它将替代许多开发人员工作流程中的pip.
> pip-tools提供了pip-compile和pip-sync命令.在这里,requirements.in列出了您的直接依赖关系,通常具有宽松的版本限制,并且pip-compile从您的.in文件生成锁定的Requirements.txt文件.

我个人喜欢这个工具,因为它是向后兼容的(生成的requirements.txt可以由pip处理),并且pip-sync工具可以确保virtualenv与锁定版本完全匹配,从而消除了不在“锁定”中的内容文件.

标签:dependencies,conda,requirements-txt,python,pip
来源: https://codeday.me/bug/20191108/2008477.html