本文最先發布與我的博客:http://www.pylixm.cchtml
最近常看到pipenv
這個管理工具,今天有時間查了下,是 Kennethreitz 大神的做品,看了下github的倉庫,是2017年1月份建立的,僅僅一年的時間變得到了7k+的收藏,最新一次的提交時間爲2天前,可見該倉庫活躍程度。本身以前寫過一篇文章《使用 pyenv + virtualenv 打造多版本python開發環境》,遺留個問題,一直沒有找到合理的同時管理python和python依賴包的工具,試用了下 pipenv
,能夠說完美的解決了python版本及包的管理問題。而且pipebv
仍是Python.org
正式推薦的python包管理工具。原文以下:python
Pipenv — the officially recommended Python packaging tool from Python.org, free (as in freedom).
那麼接下來,分享下個人試用過程,供你們參考:git
環境github
文檔算法
--python=
參數來區分python版本(再也不使用pyenv,減小包依賴)。而pipenv的思路簡單理解即是把pip和virutalenv 2個工具統一塊兒來,使用 pipenv
來代替。pipenv
使用 Pipfile 來代替 requirement.txt 文件記錄python包。Pipfile.lock
文件來鎖定python軟件的包名及版本,以及其依賴關係的列表。pipenv
可以使用 pip 直接安裝。shell
pip install pipenv
做者推薦在python3
下邊安裝,會提升與virtualenv的兼容性。npm
The use of Python 3 is highly preferred over Python 2, when installing Pipenv. Compatibility with three virtualenvs is greatly improved when using Python 3 as the installation target. —Kenneth Reitz
爲防止和系統python庫產生影響,可以使用此種方案安裝。flask
pip install --user pipenv
pip 默認安裝包路徑爲/usr/local/lib/python2.7/site-packages
。此模式下,pip安裝包保存路徑爲用戶庫路徑,通常爲/Users/pylixm/Library/Python/3.6/lib/python/site-packages
, 可以使用命令python3 -m site --user-site
具體查看。若是在安裝後你的shell中pipenv不可用,你須要把用戶庫的二進制目錄/Users/pylixm/Library/Python/3.6/bin
添加到你的PATH中。bash
執行pipenv install
,建立虛擬環境,以下:composer
~/laboratory/pip_test_project ⌚ 20:42:10 $ pipenv install Creating a virtualenv for this project… ⠋New python executable in /Users/pylixm/.local/share/virtualenvs/pip_test_project-MXA0TC90/bin/python2.7 Also creating executable in /Users/pylixm/.local/share/virtualenvs/pip_test_project-MXA0TC90/bin/python Installing setuptools, pip, wheel...done. Virtualenv location: /Users/pylixm/.local/share/virtualenvs/pip_test_project-MXA0TC90 Creating a Pipfile for this project… Pipfile.lock not found, creating… Locking [dev-packages] dependencies… Locking [packages] dependencies… Updated Pipfile.lock (c23e27)! Installing dependencies from Pipfile.lock (c23e27)… ? ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/0 — 00:00:00 To activate this project's virtualenv, run the following: $ pipenv shell
從打印信息可見,它在目錄用戶目錄.local
下建立了個和項目同名的虛擬環境(可經過配置環境變量來自定義虛擬環境目錄,export WORKON_HOME=~/.venvs
),python使用的是默認的python2.7 。
可經過參數--two
和--three
來泛指python版本,也可經過--python 3.5
來明確知道python版本,可是這些參數的前提是你係統上有此python版本,不然會報以下錯誤:
$ pipenv --python 3.5 Warning: Python 3.5 was not found on your system… You can specify specific versions of Python with: $ pipenv --python path/to/python
有點像 virtualenv 的 --python
參數。
初始化好虛擬環境後,會在項目目錄下生成2個文件Pipfile
和Pipfile.lock
。爲pipenv包的配置文件,代替原來的 requirement.txt。項目提交時,可將Pipfile
文件和Pipfile.lock
文件受控提交,待其餘開發克隆下載,根據此Pipfile 運行命令pipenv install [--dev]
生成本身的虛擬環境。
Pipfile.lock
文件是經過hash算法將包的名稱和版本,及依賴關係生成哈希值,能夠保證包的完整性。
安裝 requests
模塊:
$ pipenv install requests Installing requests… Collecting requests Using cached requests-2.18.4-py2.py3-none-any.whl Collecting certifi>=2017.4.17 (from requests) Using cached certifi-2017.11.5-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 Installing collected packages: certifi, idna, urllib3, chardet, requests Successfully installed certifi-2017.11.5 chardet-3.0.4 idna-2.6 requests-2.18.4 urllib3-1.22 Adding requests to Pipfile's [packages]… PS: You have excellent taste! ✨ ? ✨ Locking [dev-packages] dependencies… Locking [packages] dependencies… Updated Pipfile.lock (2f8679)!
可經過命令pipenv graph
查看已安裝模塊,同時可查看他們直接的相互依賴狀況。
$ pipenv graph requests==2.18.4 - certifi [required: >=2017.4.17, installed: 2017.11.5] - chardet [required: <3.1.0,>=3.0.2, installed: 3.0.4] - idna [required: >=2.5,<2.7, installed: 2.6] - urllib3 [required: >=1.21.1,<1.23, installed: 1.22]
可經過如下命令,僅安裝在開發環境,
pipenv install --dev requests --three
區別反映在Pipfile
上爲:
[[source]] url = "https://pypi.python.org/simple" verify_ssl = true name = "pypi" [dev-packages] [packages] requests = "*" flask = "==0.10" [requires] python_version = "3.6"
安裝包記錄是在[dev-packages]
部分,仍是[packages]
部分。在安裝時,指定--dev
參數,則只安裝[dev-packages]
下的包,若安裝時不定指定--dev
參數,只會安裝[packages]
包下面的模塊。
[requires]
下的python在構建新的虛擬環境時,若沒有會自動下載安裝。
pipenv install -r requirements.txt
這樣咱們能夠重用以前的requirement.txt 文件來構建咱們新的開發環境,能夠把咱們的項目順利的遷到pipenv。
可經過如下命令生成requirements 文件:
pipenv lock -r [--dev] > requirements.txt
可以使用如下命令來運行項目:
pipenv run python xxx.py
或者啓動虛擬環境的shell環境:
~/laboratory/pip_test_project $ pipenv shell --anyway Spawning environment shell (/bin/zsh). Use 'exit' to leave. source /Users/pylixm/.local/share/virtualenvs/pip_test_project-MXA0TC90/bin/activate ~/laboratory/pip_test_project $ source /Users/pylixm/.local/share/virtualenvs/pip_test_project-MXA0TC90/bin/activate (pip_test_project-MXA0TC90) ~/laboratory/pip_test_project $ exit ~/laboratory/pip_test_project $ pipenv shell Shell for UNKNOWN_VIRTUAL_ENVIRONMENT already activated. No action taken to avoid nested environments.
直接運行pipenv shell
並不會出現shell命令行,是應爲沒有配置環境變量。還須要進一步研究,貌似須要配置環境變了,一直沒找到。
pipenv
提供了.env
文件,放在項目目錄下,提供項目所需的環境變量,運行pipenv shell
時,會自動加載。
刪除包:
pipenv uninstall reuqests
刪除虛擬環境:
pipenv --rm
pipenv
完美的解決了python的包和版本的管理。時間有限,以上列舉的僅爲部分功能,更多的強大功能詳見官方文檔。