准備
Python官網:
Python官方文檔:
環境搭建
簡介
pipenv
是Python官方推薦的包管理工具。可以說,它集成了virtualenv
, pip
和pyenv
三者的功能。其目的旨在集合了所有的包管理工具的長處,如: npm
, yarn
, composer
等的優點。
它能夠自動為項目創建和管理虛擬環境,從Pipfile
文件添加或刪除安裝的包,同時生成Pipfile.lock
來鎖定安裝包的版本和依賴信息,避免構建錯誤。
pipenv
主要解決了如下問題:
- 不用再單獨使用
pip
和virtualenv
, 現在它們合並在一起了 - 不用再維護
requirements.txt
, 使用Pipfile
和Pipfile.lock
來代替 - 可以使用多個python版本(
python2
和python3
) - 在安裝了
pyenv
的條件下,可以自動安裝需要的Python版本
准備
1、pyenv是什么?
pyenv是Python版本管理工具,利用它我們可以在同一台電腦上安裝多個版本的Python,這個過程非常簡單。
2、 pipenv是什么?
pipenv是Python官方推薦的包管理工具,用來管理安裝包的。類似於npm包。
3、利用pipenv和pyenv管理多個相互獨立的Python虛擬開發環境。
1. 安裝pyenv—用來安裝多個Python版本
1.1、安裝或升級pyenv
首先安裝pyenv,如果你是Mac電腦,那么推薦使用Homebrew來安裝。
brew update
brew install pyenv
1.2、用pyenv安裝Python
安裝完pyenv,安裝Python就簡單了。我電腦上系統自帶的是Python2.7.10,我准備再安裝一個Python2.7.14和Python3.6.4,以后開發時候就用自己安裝的Python2.7.14或者Python3.6.4了。
pyenv install 3.6.4 2.7.24
pyenv rehash
執行命令pyenv versions,如果輸出結果如下,那么說明我們已經安裝好了Python2.7.14和Python3.6.4:
pyenv versions
system
* 2.7.14
* 3.6.4
現在我們就可使用Python2.7.14和Python3.6.4了。執行這個下面python2、python3、python指令可以進入到不同版本的Python環境。
pyenv global屬於全局切換,pyenv local屬於局部切換,局部切換只在所在切換時的目錄中生效。可以通過如下命令來切換版本:
$: pyenv global 3.6.4
$: pyenv versions
system
2.7.14
* 3.6.4 (set by /Users/chunming.liu/.pyenv/version)
pyenv local 2.7.14
重要事情說三遍:
不過有了pipenv,我們不用手動切換Python版本了,也就是安裝完了pyenv之后不用再去安裝具體的Python版本了。
注意:
add --enable-shared for pyenv python installations
https://github.com/pyenv/pyenv/wiki#how-to-build-cpython-with---enable-shared
2. 安裝pyenv---用來安裝相互獨立的虛擬環境
2.1、安裝pipenv
如果你是Mac電腦,那么推薦使用Homebrew來安裝。
brew install pipenv
執行pipenv,可以查看pipenv的幫助信息。
2.2、為項目建立虛擬環境
默認地,虛擬環境會創建在~/.local/share/virtualenvs目錄里面。
如果我們希望在每個項目的根目錄下保存虛擬環境目錄(.venv),需要在 .bashrc 或 .bash_profile 中配置如下:
export PIPENV_VENV_IN_PROJECT=1
要想使配置生效,執行下source ~/.bashrc或者source ~/.bash_profile。
接下來我們為項目創建虛擬環境。
mkdir pipenv_demo
cd pipenv_demo
pipenv --three # 初始化一個python3虛擬環境
pipenv --two # 初始化一個python3虛擬環境
創建完虛擬環境之后,在pipenv_demo目錄下將會看到一個.venv的目錄,這個目錄就是pipenv_demo項目的虛擬環境。
使用具體的python版本創建虛擬環境,可以執行:
pipenv --python 2.7.14
指定版本
pyenv versions
* system (set by /Users/lucas/.pyenv/version)
3.8.1
$ pipenv --rm
$ pipenv install
$ Creating a virtualenv for this project…3.8.1
2.3、為項目安裝第三方依賴包
為項目安裝自己的依賴包到虛擬環境中,使每個項目擁有相互獨立的第三方包,是非常不錯的Python的開發實踐。安裝依賴包到虛擬環境中:
pipenv install flask
pipenv install pytest --dev # 用於區分需要部署到線上的開發包、只需要在測試環境中執行的包
執行完上面的命令后,檢查一下是否安裝成功:
$ pipenv graph
Flask==0.12.2
- click [required: >=2.0, installed: 6.7]
- itsdangerous [required: >=0.21, installed: 0.24]
- Jinja2 [required: >=2.4, installed: 2.10]
- MarkupSafe [required: >=0.23, installed: 1.0]
- Werkzeug [required: >=0.7, installed: 0.14.1]
pytest==3.4.2
- attrs [required: >=17.2.0, installed: 17.4.0]
- pluggy [required: >=0.5,<0.7, installed: 0.6.0]
- py [required: >=1.5.0, installed: 1.5.2]
- setuptools [required: Any, installed: 38.6.0]
- six [required: >=1.10.0, installed: 1.11.0]
2.4 更新 pypi源來提高依賴庫安裝的速度
在使用pipenv的時候,常常會在安裝的時候,一直卡在了 Locking 這里,通過加上 -v 參數,可以看到安裝過程中的步驟信息,卡在了下載那里,這時應該可以意識到是因為網絡的原因,pipenv創建的 Pipfile 中默認的pypi源是python官方的 https://pypi.python.org/simple。我們國內用戶訪問下載的時候會很慢。
所以,我一般會在創建好Pipfile以后,修改到文件中 source 塊下的 url 字段,設置為國內的 pypi 源就好了,我推薦的是清華的pypi源或者阿里源,具體設置如下:
[[source]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
verify_ssl = true
name = "pypi"
3、使用虛擬環境進行開發
虛擬環境創建好了之后,就可以在里面進行開發了。
如果在命令行下開發,則在項目目錄下執行pipenv shell,就進入到了虛擬環境中,在這個環境中,就已經包含安裝過的所有第三方依賴包了,接下來就可以利用這些第三方包進行開發工作了。
如果是用Pycharm進行開發,就更簡單了,直接用Pycharm打開項目目錄就好了,打開后可以從Pycharm中的左側導航欄里面看到External Libraries里面顯示的是虛擬環境中的Python解釋器。
4、刪除安裝的第三方包
如果是要刪除虛擬環境中的第三方包,執行
pipenv uninstall flask
5、安裝項目所有的依賴
用git管理項目時候,要把Pipfile和Pipfile.lock加入版本跟蹤。這樣clone了這個項目的同學,只需要執行
pipenv install
就可以安裝所有的Pipfile中 [packages]部分的包了,並且自動為項目在自己電腦上創建了虛擬環境。
如果是想要安裝[dev-packages]部分的包,需要執行:
pipenv install -d
上面的方法都是安裝Pipfile中列出來的第三方包的最新版本,如果是想安裝Pipfile.lock中固定版本的第三方依賴包,需要執行:
pipenv install --ignore-pipfile
如果你的項目之前使用requirements.txt來管理依賴的,那么使用pipenv安裝所有依賴可以采用類似pip的方法:
pipenv install -r path/to/requirements.txt
6、團隊實踐建議
建議團隊內開發人員,在自己電腦上都安裝pyenv和pipenv。Pipfile和Pipfile.lock加入版本跟蹤,.venv不要加入版本管理。為自己的每一個項目建立獨立的虛擬環境。
7、擴展命令(了解下就好)
- 查看虛擬環境python解釋器所在位置
pipenv --py
- 查看虛擬環境所在位置
pipenv --venv
- 使用更底層的命令
pip freeze
pipenv run pip freeze
- 只在安裝開發階段使用的軟件包(和npm類似)
pipenv install pytest --dev
- 安裝Pipfile.lock的所有包(完整移植開發環境)
pipenv sync
參考鏈接:https://blog.csdn.net/liuchunming033/article/details/79582617
https://blog.windrunner.me/python/pip.html#pip-與-pipfile