管理应用程序依赖项#

包安装教程介绍了安装和更新 Python 包的基本知识。

但是,即使对于您自己的个人项目,交互式运行这些命令也会变得很乏味,而对于项目有多个贡献者时,尝试自动设置开发环境会变得更加困难。

本教程将指导您使用 Pipenv 管理应用程序的依赖项。它将向您展示如何安装和使用必要的工具,并对最佳实践提出有力的建议。

请记住,Python 用于许多不同的目的,而您希望如何管理依赖项可能会根据您决定发布软件的方式而改变。此处提供的指导最直接适用于网络服务(包括 Web 应用程序)的开发和部署,但也非常适合管理任何类型的项目的开发和测试环境。

有关替代方案,请参见 用于应用程序依赖项管理的其他工具

安装 Pipenv#

Pipenv 是 Python 项目的依赖项管理器。如果您熟悉 Node.js 的 npm 或 Ruby 的 bundler,那么它的精神与这些工具类似。虽然 pip 对于个人使用通常就足够了,但对于协作项目,我们推荐使用 Pipenv,因为它是一种更高级别的工具,可以简化对常见用例的依赖项管理。

使用 pip 安装 Pipenv

python3 -m pip install --user pipenv
py -m pip install --user pipenv

注意

这会执行 用户安装 以防止破坏任何系统级包。如果在安装后 pipenv 在您的 shell 中不可用,则需要将 user base 的二进制目录添加到您的 PATH 中。有关更多信息,请参见 安装到用户站点

为您的项目安装包#

Pipenv 在每个项目的基础上管理依赖项。要安装包,请切换到您的项目目录(或仅针对本教程的空目录),然后运行

cd myproject
pipenv install requests

Pipenv 将安装 Requests 库,并在项目的目录中为您创建一个 PipfilePipfile 用于跟踪项目所需的依赖项,以防您需要重新安装它们,例如当您与他人分享项目时。您应该获得类似于此的输出(尽管显示的确切路径会有所不同)

Creating a Pipfile for this project...
Creating a virtualenv for this project...
Using base prefix '/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6'
New python executable in ~/.local/share/virtualenvs/tmp-agwWamBd/bin/python3.6
Also creating executable in ~/.local/share/virtualenvs/tmp-agwWamBd/bin/python
Installing setuptools, pip, wheel...done.

Virtualenv location: ~/.local/share/virtualenvs/tmp-agwWamBd
Installing requests...
Collecting requests
  Using cached requests-2.18.4-py2.py3-none-any.whl
Collecting idna<2.7,>=2.5 (from requests)
  Using cached idna-2.6-py2.py3-none-any.whl
Collecting urllib3<1.23,>=1.21.1 (from requests)
  Using cached urllib3-1.22-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests)
  Using cached chardet-3.0.4-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests)
  Using cached certifi-2017.7.27.1-py2.py3-none-any.whl
Installing collected packages: idna, urllib3, chardet, certifi, requests
Successfully installed certifi-2017.7.27.1 chardet-3.0.4 idna-2.6 requests-2.18.4 urllib3-1.22

Adding requests to Pipfile's [packages]...

使用已安装的包#

现在 Requests 已安装,您可以创建一个简单的 main.py 文件来使用它

import requests

response = requests.get('https://httpbin.org/ip')

print('Your IP is {0}'.format(response.json()['origin']))

然后,您可以使用 pipenv run 运行此脚本

pipenv run python main.py

您应该获得类似于此的输出

Your IP is 8.8.8.8

使用 pipenv run 确保已安装的包可供您的脚本使用。还可以生成一个新 shell,确保所有命令都可以使用 pipenv shell 访问已安装的包。

下一步#

恭喜,您现在知道如何在协作 Python 项目中有效管理依赖项和开发环境! ✨ 🍰 ✨

如果您有兴趣创建和分发自己的 Python 包,请参阅 关于打包和分发包的教程

请注意,当您的应用程序包含 Python 源包的定义时,它们(及其依赖项)可以通过 pipenv install -e <relative-path-to-source-directory>(例如 pipenv install -e .pipenv install -e src)添加到您的 pipenv 环境中。

用于应用程序依赖项管理的其他工具#

如果您发现这种管理应用程序依赖项的方法不适合您或您的用例,您可能需要按字母顺序浏览这些其他工具和技术,看看其中是否有更适合您的

  • hatch 用于对项目管理工作流中的更多步骤进行固执的覆盖,例如增加版本和从项目模板创建新的框架项目。

  • micropipenv 用于 pip 的轻量级包装器,支持 requirements.txt、Pipenv 和 Poetry 锁定文件,或将它们转换为与 pip-tools 兼容的输出。专为容器化 Python 应用程序设计,但不仅限于此。

  • PDM 用于依赖于 PEP 517PEP 621 等标准的现代 Python 包管理。

  • pip-tools 用于从直接用于项目中的包列表创建所有依赖项的锁定文件,并确保只安装这些依赖项。

  • Poetry 用于与 Pipenv 范围相当的工具,更直接地关注将被管理的项目构建为具有有效 pyproject.toml 文件的可分发 Python 包的用例。相比之下,Pipenv 明确避免假设正在处理的应用程序将支持作为 pip 可安装 Python 包进行分发。