人类友好的Python开发工作流程。
项目描述
Pipenv:面向人类的 Python 开发工作流程
Pipenv 是一个支持多种系统的 Python 虚拟环境管理工具,它很好地连接了 pip、python(使用系统 python、pyenv 或 asdf)和 virtualenv 之间的差距。 Linux、macOS 和 Windows 在 pipenv 中都是一等公民。
Pipenv 会自动为您创建和管理虚拟环境,并在您安装/卸载包时从您的 Pipfile
中添加/删除包。它还生成一个项目的 Pipfile.lock
文件,该文件用于生成确定性的构建。
Pipenv 主要旨在为应用程序的用户和开发者提供一个简单的方法,以便达到一致的工作项目环境。
Pipenv 力求解决的问题是多方面的
- 您不再需要单独使用
pip
和virtualenv
:它们一起工作。 - 管理带有包哈希的
requirements.txt
文件可能会出现问题。Pipenv 使用Pipfile
和Pipfile.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
有关最新说明,请参阅 文档
✨🍰✨
功能
- 实现真正的 确定性构建,同时轻松指定 您想要的内容。
- 为已锁定的依赖项生成和检查文件哈希。
- 如果
pyenv
或asdf
可用,则自动安装所需的 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>
的有效值包括 git
、bzr
、svn
和 hg
。有效值 <scheme>
包括 http
、https
、ssh
和 file
。在特定情况下,您还可以访问其他方案:svn
可以与 svn
作为方案结合使用,而 bzr
可以与 sftp
和 lp
结合使用。
请注意,强烈建议您使用 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。
星历史
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。