文章目錄
Pipenv是官方推薦的的python包管理工具,可以實現項目之間依賴的隔離。本文將介紹pipenv的基本使用。實驗環境爲win10+Python3.7,其他平臺一樣適用。順便說一下,關於Python的依賴管理,可以看一下我寫過的博文, Python依賴管理
1. 安裝pipenv
使用pipenv之前,需要先安裝pipenv及其依賴項。可以使用pip安裝,關於pip,可以看我之前的博文,pip的基本使用。
安裝可以使用命令pip install pipenv
安裝完後可以先使用pipenv --help
命令預覽一下pipenv的用法。
2. 虛擬環境
簡單來講,虛擬環境就是隔離你項目中安裝的庫的一個環境。想象一下,如果想在自己的電腦做幾個不同的項目,而不同的項目需要不同版本的庫,都放在相同的環境下可能會帶來意想不到的麻煩,很可能會遇到庫版本衝突的問題。比如項目A需要numpy1.0,而項目B需要numpy1.15。而pip安裝的庫只有一個版本,而且是全局的。在虛擬環境下安裝的庫都會被隔離在該環境中,不會與其他環境衝突。通常,我們爲每個項目都創建一個虛擬環境,以此來隔離我們的工作環境。
3. 創建虛擬環境
創建自己的項目目錄,在該目錄下使用命令pipenv install
可以創建一個虛擬的環境。如圖
如果想指定創建的虛擬環境的Python版本,可以使用下面的命令。
pipenv --python 3.6 #指定使用Python3.6的虛擬環境
pipenv --two #使用系統的Python2在創建虛擬環境
pipenv --three #使用系統的Python3在創建虛擬環境
#注意:以上三個參數只能單獨使用。它們還具有破壞性,會刪除當前的虛擬環境,然後用適當版本的虛擬環境替代。
當給定了一個Python版本的時候,Pipenv會自動掃描系統中能夠匹配給定的Python版本的Python解釋器,沒指定版本時,使用系統默認的Python版本。
執行完命令,項目文件夾會生成兩個文件,Pipfile
和Pipfile.lock
。如果命令執行前項目目錄中不存在 Pipfile 文件,該命令將會創建一個 Pipfile 文件。如果已經有Pipfile 文件已經存在,則會根據這個Pipfile生成虛擬環境。
Profile內容解析
使用記事本打開Profile文件,可以看到如下內容。
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
[packages]
[requires]
python_version = "3.7"
source
用來設置倉庫地址,即從哪下載虛擬環境所需要的包packages
用來指定項目依賴的包,即你安裝了的包dev-packages
用來指定開發環境需要的包,這類包只用於開發過程,不用與生產環境,比如單元測試相關的包,只在開發階段有用,這樣分開便於管理。requires
中指定目標Python版本
Pipfile.lock
文件
Pipfile.lock
中記錄了當前虛擬環境中安裝的依賴的版本號以及哈希,以保證每次根據這些值裝出來的依賴都是一致的,該文件用來保證包的完整性。記住,任何情況下不要手動修改該文件!- 項目提交時,可將
Pipfile
文件和Pipfile.lock
文件一併提交,給其他開發人員克隆下載,他們可以根據此Pipfile文件運行命令pipenv install
生成自己的虛擬環境。
一個好消息是,PyCharm2018.2開始支持pipenv了。我們也可以在創建項目時使用Pipenv,如圖
4. 虛擬環境位置
我們創建的虛擬環境默認會在~/.virtualenvs
中,虛擬環境的命名以我們的項目名爲前綴,前面我們所創建的虛擬環境如下圖所示
如果想看虛擬環境的位置相關信息,可以輸入命令pipenv --venv
,如圖
5. 安裝Python包
使用pipenv可以輕鬆優雅地管理項目所依賴的包,下面通過實際使用案例來學習其用法
# 安裝命令
pipenv install beautifulsoup4 #在項目所在虛擬環境中安裝beautifulsoup4
pipenv install parsel==1.3.1 #安裝parsel並指定其版本
pipenv install --dev nose2 #安裝nose2包並將其關聯爲只在開發環境中需要的包
# 卸載命令
pipenv uninstall beautifulsoup4 #在項目所在虛擬環境中卸載beautifulsoup4
pipenv uninstall --all #從虛擬環境中移除所有已安裝的包,但Pipfile.lock文件不受影響
pipenv uninstall --all--dev #從虛擬環境中卸載所有開發包,並從Pipfile文件中移除這些包
# 更新命令
pipenv update requests #在項目中更新requests包
pipenv update #更新項目中所有的包
pipenv update --outdated #查看現有包哪些已經過期
#查看命令
pipenv grash #顯示現有的依賴包
pipenv lock #更新Pipfile.lock文件鎖定當前環境的依賴版本
-
上面代碼中值得一提的是
--dev
標誌,加了此標誌的包只用於開發環境,安裝包記錄在Pipfile中的dev-package
中,如果別人克隆你的Profile文件後使用命令pipenv install
創建虛擬環境,默認不會安裝dev-package
下的安裝包,除非使用命令pipenv install --dev
-
Pipefile 和 Pipefile.lock 都會按照你的操作進行自動的更新,如果需要手動修改包的依賴條件,手工編輯 Pipefile 並進行安裝即可。
6. 兼容virtualenv
-
pipenv可以像virtualenv一樣使用命令生成requirements.txt文件。
pipenv lock -r --dev > requirements.txt
-
同樣的,也可以像virtualenv一樣通過requirements.txt文件安裝包
pipenv install -r requirements.txt
這個命令讓我們可以重用以前requirements.txt文件來構建我們新的開發環境,把我們的項目順利的遷到pipenv。
7. 進入虛擬環境
跟virtualenv一樣,要在虛擬環境中運行代碼,“激活”虛擬環境。假設可以使用命令pipenv shell
進入我們創建的虛擬環境。如下
執行完命令,命令提示符前出現瞭如**(TestPipenv-tmf99lpc)**的前綴,那是我們虛擬環境的名字,這代表我們已經進入了虛擬環境,在其中使用的命令是虛擬環境版本的命令,不是系統的命令。舉個例子,如下圖
這裏進入的是虛擬環境裏的Python版本,而不是我們系統環境的Python版本。同樣的, 虛擬環境中使用的pip是虛擬環境下的pip,用其安裝的庫會裝在虛擬環境中,不會與系統或其他項目的庫衝突。
進入虛擬環境後,我們可以在虛擬環境中運行我們的項目代碼,如下
如果想退出虛擬環境,輸入exit
即可。
如果想在不進入虛擬環境的情況下使用虛擬環境運行代碼,可以使用pipenv run
命令,如下
8. 刪除虛擬環境
如果想刪除虛擬環境,可以使用命令pipenv --rm
, 如下:
值得注意的是,刪除了虛擬環境,如果再次使用pipenv shell
,會在該目錄下創建一個新的虛擬環境,然後再進入虛擬環境。