Pipenv使用入門


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版本。

執行完命令,項目文件夾會生成兩個文件,PipfilePipfile.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,如圖

1561799379908

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

  1. pipenv可以像virtualenv一樣使用命令生成requirements.txt文件。

    pipenv lock -r --dev > requirements.txt
    
  2. 同樣的,也可以像virtualenv一樣通過requirements.txt文件安裝包

    pipenv install -r requirements.txt
    

    這個命令讓我們可以重用以前requirements.txt文件來構建我們新的開發環境,把我們的項目順利的遷到pipenv。

7. 進入虛擬環境

跟virtualenv一樣,要在虛擬環境中運行代碼,“激活”虛擬環境。假設可以使用命令pipenv shell進入我們創建的虛擬環境。如下

1561799599939

執行完命令,命令提示符前出現瞭如**(TestPipenv-tmf99lpc)**的前綴,那是我們虛擬環境的名字,這代表我們已經進入了虛擬環境,在其中使用的命令是虛擬環境版本的命令,不是系統的命令。舉個例子,如下圖

1561799760636

這裏進入的是虛擬環境裏的Python版本,而不是我們系統環境的Python版本。同樣的, 虛擬環境中使用的pip是虛擬環境下的pip,用其安裝的庫會裝在虛擬環境中,不會與系統或其他項目的庫衝突。

進入虛擬環境後,我們可以在虛擬環境中運行我們的項目代碼,如下

在這裏插入圖片描述

如果想退出虛擬環境,輸入exit即可。

在這裏插入圖片描述

如果想在不進入虛擬環境的情況下使用虛擬環境運行代碼,可以使用pipenv run命令,如下

1561800220769

8. 刪除虛擬環境

如果想刪除虛擬環境,可以使用命令pipenv --rm, 如下:

1561800504331

值得注意的是,刪除了虛擬環境,如果再次使用pipenv shell,會在該目錄下創建一個新的虛擬環境,然後再進入虛擬環境。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章