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。