pipenv 的用例是什么?

What is the use case of pipenv?

我正在阅读这个名为 pipenv 的新工具,但不明白这个工具的用例是什么。

  1. 要创建一个包,我仍然需要维护 setup.pyrequirements.txt
  2. 要创建开发环境,我很可能仍需要 toxvirtualenv
  3. 要创建包或轮子,我仍然需要使用 pip,因为 pipenv devs don't care about this feature

那么使用不同语法的另一个工具和配置文件有什么意义呢? pipenv解决什么问题?

setup.pytoxrequirementsvirtualenv 等的所有功能对于分发需要构建和测试的库的人来说都是至关重要的针对多个版本的 Python 以及可能的多个版本的要求。

docs mention this,但我会重申。 Pipenv 面向应用程序开发人员和服务提供商。在那些情况下,您通常构建一个单一的配置,并积极更新您的版本集。此外,您需要能够轻松回滚到以前的版本集。

您使用 requirements.txt 得到的是版本固定,因此您可以回滚,但 pip 从不强制执行版本一致性,因此您可以构建一个具有矛盾版本的 requirements.txt。它是 python,所以大多数时候你可以摆脱它,但拥有一致的版本确实可以减轻 class 的问题。

pip-tools 可以构建一致的版本集,但您现在要处理三个独立的实用程序:pippip-toolsvirtualenv。如果每个人都总是小心 运行 所有这三者以使事情保持最新,那就太好了,当然他们没有。

pipenv 添加的是将所有这三个方面的管理结合起来,并始终强制执行版本一致性。

如果你做的事情像 git checkout 一样简单,你所要做的就是 运行 pipenv sync --dev 更新你的 virtualenv。

使用 pip,您必须完全清除 virtualenv 并重新运行 pip install 因为 pip 不会删除现有的包。

如果您将 Pipfile 设置为 "yourpackage" = {path=".", editable=true},那么您可以在 setup.py 中更新要求,并且 pipenv update 将确保您的 virtualenv 得到相应更新,否则会报告错误。

需要说明的是,没有单独由 pipenv 处理的用例;你可以用其他工具来做。但它确实有一个受众,即应用程序开发人员,并且它通过为用户提供更加一致的体验而与众不同。我还发现,在实践中,它对库开发也很有帮助,因为测试套件本身就是一个应用程序。