跳转到主要内容

人类友好的Python开发工作流程。

项目描述

Pipenv:面向人类的 Python 开发工作流程

image image CI image


Pipenv 是一个支持多种系统的 Python 虚拟环境管理工具,它很好地连接了 pip、python(使用系统 python、pyenv 或 asdf)和 virtualenv 之间的差距。 Linux、macOS 和 Windows 在 pipenv 中都是一等公民。

Pipenv 会自动为您创建和管理虚拟环境,并在您安装/卸载包时从您的 Pipfile 中添加/删除包。它还生成一个项目的 Pipfile.lock 文件,该文件用于生成确定性的构建。

Pipenv 主要旨在为应用程序的用户和开发者提供一个简单的方法,以便达到一致的工作项目环境。

Pipenv 力求解决的问题是多方面的

  • 您不再需要单独使用 pipvirtualenv:它们一起工作。
  • 管理带有包哈希的 requirements.txt 文件可能会出现问题。Pipenv 使用 PipfilePipfile.lock 来区分抽象依赖声明与最后测试的组合。
  • 锁文件中记录了哈希值,这些哈希值在安装时被验证。首先考虑安全因素。
  • 强烈建议使用依赖项的最新版本,以最大限度地降低由过时组件引起的安全风险 [1]
  • 让您了解您的依赖图(例如,$ pipenv graph)。
  • 通过支持 .env 文件中的本地自定义来简化开发工作流程。

目录

安装

Pipenv 可以使用 Python 3.7 及以上版本安装。

对于大多数用户,我们建议使用 pip 安装 Pipenv

pip install --user pipenv

或者,如果您使用 Fedora

sudo dnf install pipenv

或者,如果您使用 FreeBSD

pkg install py39-pipenv

或者,如果您使用 Gentoo

sudo emerge pipenv

或者,如果您使用 Void Linux

sudo xbps-install -S python3-pipenv

或者,一些用户更喜欢使用 Pipx

pipx install pipenv

或者,一些用户更喜欢使用 Python pip 模块

python -m pip install pipenv

有关最新说明,请参阅 文档

✨🍰✨

功能

  • 实现真正的 确定性构建,同时轻松指定 您想要的内容
  • 为已锁定的依赖项生成和检查文件哈希。
  • 如果 pyenvasdf 可用,则自动安装所需的 Python。
  • 通过查找 Pipfile 自动递归地找到您的项目主目录。
  • 如果不存在,则自动生成 Pipfile
  • 在标准位置自动创建虚拟环境。
  • 在安装/卸载包时自动将包添加/删除到 Pipfile
  • 如果存在,则自动加载 .env 文件。

有关命令参考,请参阅 命令

基本概念

  • 如果不存在,则将自动创建虚拟环境。
  • 当没有传递任何参数给 install 时,将安装所有指定的 [packages] 软件包。
  • 否则,将使用 virtualenv 默认的设置。

Shell 完成操作

要启用 fish 中的自动补全功能,请将以下内容添加到您的配置文件 ~/.config/fish/completions/pipenv.fish

eval (env _PIPENV_COMPLETE=fish_source pipenv)

还有一个 fish 插件,它将自动为您激活子 shell!

另外,对于 zsh,请将以下内容添加到您的配置文件 ~/.zshrc

eval "$(_PIPENV_COMPLETE=zsh_source pipenv)"

另外,对于 bash,请将以下内容添加到您的配置文件 ~/.bashrc~/.bash_profile

eval "$(_PIPENV_COMPLETE=bash_source pipenv)"

魔法 shell 补全现在已启用!

使用方法

$ pipenv --help
Usage: pipenv [OPTIONS] COMMAND [ARGS]...

Options:
  --where                         Output project home information.
  --venv                          Output virtualenv information.
  --py                            Output Python interpreter information.
  --envs                          Output Environment Variable options.
  --rm                            Remove the virtualenv.
  --bare                          Minimal output.
  --man                           Display manpage.
  --support                       Output diagnostic information for use in
                                  GitHub issues.
  --site-packages / --no-site-packages
                                  Enable site-packages for the virtualenv.
                                  [env var: PIPENV_SITE_PACKAGES]
  --python TEXT                   Specify which version of Python virtualenv
                                  should use.
  --clear                         Clears caches (pipenv, pip).  [env var:
                                  PIPENV_CLEAR]
  -q, --quiet                     Quiet mode.
  -v, --verbose                   Verbose mode.
  --pypi-mirror TEXT              Specify a PyPI mirror.
  --version                       Show the version and exit.
  -h, --help                      Show this message and exit.

使用示例

  Create a new project using Python 3.7, specifically:
  $ pipenv --python 3.7

  Remove project virtualenv (inferred from current directory):
  $ pipenv --rm

  Install all dependencies for a project (including dev):
  $ pipenv install --dev

  Create a lockfile containing pre-releases:
  $ pipenv lock --pre

  Show a graph of your installed dependencies:
  $ pipenv graph

  Check your installed dependencies for security vulnerabilities:
  $ pipenv check

  Install a local setup.py into your virtual environment/Pipfile:
  $ pipenv install -e .

  Use a lower-level pip command:
  $ pipenv run pip freeze

命令

  check         Checks for PyUp Safety security vulnerabilities and against
                PEP 508 markers provided in Pipfile.
  clean         Uninstalls all packages not specified in Pipfile.lock.
  graph         Displays currently-installed dependency graph information.
  install       Installs provided packages and adds them to Pipfile, or (if no
                packages are given), installs all packages from Pipfile.
  lock          Generates Pipfile.lock.
  open          View a given module in your editor.
  requirements  Generate a requirements.txt from Pipfile.lock.
  run           Spawns a command installed into the virtualenv.
  scripts       Lists scripts in current environment config.
  shell         Spawns a shell within the virtualenv.
  sync          Installs all packages specified in Pipfile.lock.
  uninstall     Uninstalls a provided package and removes it from Pipfile.
  update        Runs lock, then sync.
  upgrade       Update the lock of the specified dependency / sub-dependency,
                but does not actually install the packages.
  verify        Verify the hash in Pipfile.lock is up-to-date.

定位项目

$ pipenv --where
/Users/kennethreitz/Library/Mobile Documents/com~apple~CloudDocs/repos/kr/pipenv/test

定位虚拟环境

$ pipenv --venv
/Users/kennethreitz/.local/share/virtualenvs/test-Skyy4vre

定位 Python 解释器

$ pipenv --py
/Users/kennethreitz/.local/share/virtualenvs/test-Skyy4vre/bin/python

安装软件包

$ pipenv install
Creating a virtualenv for this project...
...
No package provided, installing all dependencies.
Virtualenv location: /Users/kennethreitz/.local/share/virtualenvs/test-EJkjoYts
Installing dependencies from Pipfile.lock...
...

To activate this project's virtualenv, run the following:
$ pipenv shell

从 git 安装

您可以使用 pipenv 从 git 和其他版本控制系统安装软件包,使用以下格式的 URL

<vcs_type>+<scheme>://<location>/<user_or_organization>/<repository>@<branch_or_tag>#<package_name>

唯一的可选部分是 @<branch_or_tag> 部分。当使用 SSH 通过 git 时,您可以使用缩写 vcs 和 scheme 别名 git+git@<location>:<user_or_organization>/<repository>@<branch_or_tag>#<package_name>。请注意,当解析时,这被转换为 git+ssh://git@<location>

<vcs_type> 的有效值包括 gitbzrsvnhg。有效值 <scheme> 包括 httphttpssshfile。在特定情况下,您还可以访问其他方案:svn 可以与 svn 作为方案结合使用,而 bzr 可以与 sftplp 结合使用。

请注意,强烈建议您使用 pipenv install -e 以可编辑模式安装任何版本控制的依赖项,以确保每次执行依赖项解析时都可以使用仓库的最新副本,并且包括所有已知依赖项。

以下是一个示例用法,它从标签 v2.19.1 安装位于 https://github.com/requests/requests.git 的 git 仓库,作为软件包名称 requests

$ pipenv install -e git+https://github.com/requests/[email protected]#egg=requests
Creating a Pipfile for this project...
Installing -e git+https://github.com/requests/[email protected]#egg=requests...
[...snipped...]
Adding -e git+https://github.com/requests/[email protected]#egg=requests to Pipfile's [packages]...
[...]

您可以在这里了解更多关于 pip 对 vcs 支持的实现。

安装开发依赖项

$ pipenv install pytest --dev
Installing pytest...
...
Adding pytest to Pipfile's [dev-packages]...

显示依赖图

$ pipenv graph
requests==2.18.4
  - certifi [required: >=2017.4.17, installed: 2017.7.27.1]
  - chardet [required: >=3.0.2,<3.1.0, installed: 3.0.4]
  - idna [required: >=2.5,<2.7, installed: 2.6]
  - urllib3 [required: <1.23,>=1.21.1, installed: 1.22]

生成锁文件

$ pipenv lock
Assuring all dependencies from Pipfile are installed...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Note: your project now has only default [packages] installed.
To install [dev-packages], run: $ pipenv install --dev

安装所有开发依赖项

$ pipenv install --dev
Pipfile found at /Users/kennethreitz/repos/kr/pip2/test/Pipfile. Considering this to be the project home.
Pipfile.lock out of date, updating...
Assuring all dependencies from Pipfile are installed...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...

卸载所有内容

$ pipenv uninstall --all
No package provided, un-installing all dependencies.
Found 25 installed package(s), purging...
...
Environment now purged and fresh!

使用 shell

$ pipenv shell
Loading .env environment variables...
Launching subshell in virtual environment. Type 'exit' or 'Ctrl+D' to return.
$ ▯

PIPENV 的目的和优势

要了解 Pipenv 解决的问题,展示 Python 软件包管理是如何发展的是有用的。

回想一下第一个 Python 迭代。我们有 Python,但没有一种干净的方式来安装软件包。

然后出现了 Easy Install,这个软件包以相对简单的方式安装其他 Python 软件包。但是,它有一个缺点:删除不再需要的软件包并不容易。

进入 pip,这是大多数 Python 用户都熟悉的。pip 允许我们安装和卸载软件包。我们可以指定版本,使用 pip freeze > requirements.txt 将安装的软件包列表输出到文本文件,然后使用该文本文件通过 pip install -r requirements.txt 安装应用程序所需的全部内容。

但是,pip 没有包含隔离软件包的方法。我们可能会处理使用相同库的不同版本的软件包,因此我们需要一种方法来实现这一点。

Pipenv 旨在解决几个问题。首先,需要 pip 库来安装软件包,还需要用于创建虚拟环境、管理虚拟环境的库,以及与这些库相关的所有命令。这要管理很多东西。Pipenv 内置了软件包管理和虚拟环境支持,因此您可以使用一个工具来安装、卸载、跟踪和记录您的依赖项,以及创建、使用和组织您的虚拟环境。当您使用它启动项目时,如果尚未使用,Pipenv 将自动为该项目创建虚拟环境。

Pipenv通过放弃要求.txt规范,以一个新的文档Pipfile来替代,实现了这种依赖管理。当您使用Pipenv安装一个库时,您的项目的Pipfile会自动更新,包括安装的详细信息,如版本信息以及可能包括Git仓库位置、文件路径和其他信息。

其次,Pipenv旨在使管理复杂依赖关系变得更加容易。

使用Pipenv,它为您管理不同环境下的依赖,从而避免了这些问题。此命令将安装主要项目依赖项

pipenv install

添加--dev标签将安装开发/测试需求

要生成Pipfile.lock文件,请运行

pipenv lock

您还可以使用Pipenv运行Python脚本。要运行名为hello.py的顶层Python脚本,请运行

pipenv run python hello.py

您将在控制台中看到预期的结果。

要启动shell,请运行

pipenv shell

如果您想将目前使用requirements.txt文件的项目转换为使用Pipenv,请安装Pipenv并运行

pipenv install requirements.txt

这将创建一个Pipfile并安装指定的需求。

文档

文档位于pipenv.pypa.io

星历史

Star History Chart

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

pipenv-2024.1.0.tar.gz (4.6 MB 查看哈希值)

上传时间

构建分发

pipenv-2024.1.0-py3-none-any.whl (3.0 MB 查看哈希值)

上传于 Python 3

由以下支持