管理应用程序依赖项

这个 package installation tutorial 介绍了安装和更新python包的基础知识。

然而,即使对于您自己的个人项目,以交互方式运行这些命令也会变得单调乏味,并且在尝试为具有多个贡献者的项目自动设置开发环境时,情况会变得更加困难。

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

请记住,python用于许多不同的目的,并且您想要管理依赖关系的方式可能会根据您决定发布软件的方式而改变。这里给出的指南最直接地适用于网络服务(包括Web应用程序)的开发和部署,但也非常适合于管理任何类型项目的开发和测试环境。

注解

本指南是为python 3编写的,但是,这些说明也适用于python 2.7。

安装Pipenv

Pipenv 是Python项目的依赖关系管理器。如果您熟悉node.js' npm 或者鲁比的 bundler 它在精神上与那些工具相似。当 pip 单独使用pipenv通常就足够个人使用了,它被推荐用于协作项目,因为它是一个更高级的工具,可以简化常见用例的依赖关系管理。

使用 pip 要安装pipenv:

pip install --user pipenv

注解

这是一个 user installation 以防止破坏任何系统范围的包。如果 pipenv 安装后外壳中不可用,您需要添加 user base 的二进制目录 PATH . 见 安装到用户站点 更多信息。

为项目安装包

pipenv基于每个项目管理依赖项。要安装软件包,请更改到项目的目录(或仅此教程的空目录),然后运行:

cd myproject
pipenv install requests

pipenv将安装 Requests 库并创建 Pipfile 在项目目录中。这个 Pipfile 用于跟踪项目需要哪些依赖项,以防需要重新安装它们,例如与其他人共享项目时。您应该得到与此类似的输出(尽管显示的确切路径会有所不同):

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]...

使用已安装的软件包

现在安装了请求,您可以创建一个简单的 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包感兴趣,请参见 tutorial on packaging and distributing packages .

请注意,当应用程序包含Python源代码包的定义时,可以将它们(及其依赖项)添加到 pipenv environment with pipenv install -e <relative-path-to-source-directory> (e.g. pipenv install -e .pipenv install -e src

如果您发现这种管理应用程序依赖性的特殊方法对您或您的用例不起作用,那么您可能希望探索这些其他工具和技术,以查看其中一种是否更适合:

  • pip-tools to build your own custom workflow from lower level pieces like pip-compile and pip-sync

  • hatch 对于项目管理工作流中更多步骤(例如增加版本、标记发布以及从项目模板创建新的框架项目)的明确覆盖

  • poetry 对于范围可比的工具 pipenv 这将更加直接地关注将要管理的存储库结构为具有有效的 pyproject.toml 文件(相比之下, pipenv 显式避免假定正在处理的应用程序依赖于Pypi的组件,它本身将支持作为 pip -可安装的python包)。