Pipenv是一个 Python virtualenv 管理工具,支持多种系统,并很好地弥合了 pip、python(使用系统 python、pyenv 或 asdf)和 virtualenv 之间的差距。 Linux、macOS 和 Windows 都是 pipelinev 中的一等公民。
Pipenv 会自动为您的项目创建和管理 virtualenv,并在您安装/卸载软件包时从Pipfile
添加/删除软件包。它还生成一个项目Pipfile.lock
,用于生成确定性构建。
Pipenv 主要旨在为应用程序的用户和开发人员提供一种简单的方法来实现一致的工作项目环境。
Pipenv 寻求解决的问题是多方面的:
pip
和virtualenv
:它们一起工作。requirements.txt
文件可能会出现问题。 Pipenv 使用Pipfile
和Pipfile.lock
将抽象依赖声明与最后测试的组合分开。$ pipenv graph
)。.env
文件进行本地自定义,简化开发工作流程。 皮彭夫
安装
特征
基本概念
其他命令
外壳完成
用法
使用示例
命令
找到项目
找到虚拟环境
找到Python解释器
安装包
从 git 安装
安装开发依赖项
显示依赖关系图
生成锁文件
安装所有开发依赖项
卸载一切
使用外壳
文档
Pipenv 可以与 Python 3.7 及更高版本一起安装。
对于大多数用户,我们建议使用pip
安装 Pipenv :
pip install --user 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
请参阅文档以获取最新说明。
?
pyenv
或asdf
可用,则自动安装所需的 Python。Pipfile
,自动递归地找到您的项目主页。Pipfile
不存在,则自动生成。Pipfile
。.env
文件(如果存在)。有关命令参考,请参阅命令。
install
时,将安装所有指定的包[packages]
。要在 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)"
Magic 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
$ 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
您可以使用根据以下规则格式化的 URL 从 git 和其他版本控制系统安装带有 pipelinev 的软件包:
<vcs_type>+<scheme>://<location>/<user_or_organization>/<repository>@<branch_or_tag>#<package_name>
唯一的可选部分是@<branch_or_tag>
部分。通过 SSH 使用 git 时,您可以使用简写 vcs 和方案别名git+git@<location>:<user_or_organization>/<repository>@<branch_or_tag>#<package_name>
。请注意,解析时这会转换为git+ssh://git@<location>
。
<vcs_type>
的有效值包括git
、 bzr
、 svn
和hg
。 <scheme>
的有效值包括http,
、 https
、 ssh
和file
。在特定情况下,您还可以访问其他方案: svn
可以与svn
组合作为方案, bzr
可以与sftp
和lp
组合。
请注意,强烈建议您使用pipenv install -e
在可编辑模式下安装任何版本控制的依赖项,以确保每次执行依赖项解析时都可以使用存储库的最新副本来执行依赖项解析,并且它包含所有已知的依赖项。
下面是一个示例用法,它将位于https://github.com/requests/requests.git
git 存储库从标签v2.19.1
安装为包名称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!
$ pipenv shell
Loading .env environment variables...
Launching subshell in virtual environment. Type 'exit' or 'Ctrl+D' to return.
$ ▯
要了解 Pipenv 解决的问题,展示 Python 包管理的演变过程很有用。
让自己回到第一次 Python 迭代。我们有 Python,但没有干净的方法来安装软件包。
然后是 Easy Install,这个包可以相对轻松地安装其他 Python 包。但它有一个问题:卸载不再需要的软件包并不容易。
输入大多数 Python 用户都熟悉的 pip。 pip 允许我们安装和卸载软件包。我们可以指定版本,运行 pip freeze >requirements.txt 将已安装软件包的列表输出到文本文件,并使用同一文本文件通过 pip install -rrequirements.txt 安装应用程序所需的所有内容。
但 pip 没有提供将包相互隔离的方法。我们可能会开发使用同一库的不同版本的应用程序,因此我们需要一种方法来实现这一点。
Pipenv 旨在解决几个问题。首先,需要 pip 库来进行软件包安装,加上一个用于创建虚拟环境的库,一个用于管理虚拟环境的库,以及与这些库关联的所有命令。有很多事情需要管理。 Pipenv 附带包管理和虚拟环境支持,因此您可以使用一种工具来安装、卸载、跟踪和记录依赖项,以及创建、使用和组织虚拟环境。当您使用它启动一个项目时,如果您尚未使用 Pipenv,它会自动为该项目创建一个虚拟环境。
Pipenv 通过放弃 requests.txt 规范并将其换成名为 Pipfile 的新文档来完成这种依赖关系管理。当您使用 Pipenv 安装库时,项目的 Pipfile 会自动更新该安装的详细信息,包括版本信息以及可能的 Git 存储库位置、文件路径和其他信息。
其次,Pipenv 希望能够更轻松地管理复杂的相互依赖关系。
使用 Pipenv(为您提供 Pipfile)可让您通过管理不同环境的依赖关系来避免这些问题。此命令将安装主要项目依赖项:
管道安装
添加 --dev 标签将安装开发/测试需求:
Pipenv install --dev 要生成 Pipfile.lock 文件,请运行:
管道锁
您还可以使用 Pipenv 运行 Python 脚本。要运行名为 hello.py 的顶级 Python 脚本,请运行:
pipelinev 运行 python hello.py
您将在控制台中看到预期的结果。
要启动 shell,请运行:
Pipenv 外壳
如果您想将当前使用 requests.txt 文件的项目转换为使用 Pipenv,请安装 Pipenv 并运行:
Pipenv 安装要求.txt
这将创建一个 Pipfile 并安装指定的要求。
文档位于 Pipenv.pypa.io。