Pipenv虛擬環境


什么是Pipenv

Pipenv是python官方推薦的虛擬環境管理工具,可以把它當作是virtualenv,pip,pyenv三者的集合工具,類似於npm和composer。
它能夠自動為項目創建和管理虛擬環境,從 Pipfile 文件中添加或者刪除包,同時生成 Pipfile.lock 文件來鎖定安裝包的版本和依賴信息,避免構建錯誤。

pipenv 主要解決了以下問題:

  • 不用再單獨使用 virtualenv、pyenv 和 pip 了,現在它們結合到了一起。
  • 不用再維護 requirement.txt 了,使用 Pipfile 和 Pipfile.lock 來代替。
  • 可以在開發環境使用多個 python 版本。
  • 在安裝的 pyenv 條件下,可以自動安裝需要的 python 版本。
  • 安全,廣泛地使用 Hash 校驗,能夠自動曝露安全漏洞。
  • 隨時查看圖形化的依賴關系。
  • 可通過自動加載 .env 讀取環境變量,簡化開發流程。

安裝 pipenv

MacOS下使用pip安裝

$ pip install --user pipenv

這個命令在用戶級別(非系統全局)下安裝 pipenv。如果安裝后 shell 提示找不到 pipenv 命令,你需要添加當前 Python 用戶主目錄的 bin 目錄到 PATH 環境變量。如果你不知道 Python 用戶主目錄在哪里,用下面的命令來查看:

$ python -m site --user-base

輸出如下

MacOS下使用brew安裝

$ brew install pipenv

Pipenv常用命令

命令

$ pipenv
Usage: pipenv [OPTIONS] COMMAND [ARGS]...

Options:
  --where          顯示項目文件所在路徑
  --venv           顯示虛擬環境實際文件所在路徑
  --py             顯示虛擬環境Python解釋器所在路徑
  --envs           顯示虛擬環境的選項變量
  --rm             刪除虛擬環境
  --bare           最小化輸出
  --completion     完整輸出
  --man            顯示幫助頁面
  --three / --two  使用Python 3/2創建虛擬環境(注意本機已安裝的Python版本)
  --python TEXT    指定某個Python版本作為虛擬環境的安裝源
  --site-packages  附帶安裝原Python解釋器中的第三方庫
  --jumbotron      An easter egg, effectively.
  --version        版本信息
  -h, --help       幫助信息

命令參數

Commands:
  check      檢查安全漏洞
  graph      顯示當前依賴關系圖信息
  install    安裝虛擬環境或者第三方庫
  lock       鎖定並生成Pipfile.lock文件
  open       在編輯器中查看一個庫
  run        在虛擬環境中運行命令
  shell      進入虛擬環境
  uninstall  卸載一個庫
  update     卸載當前所有的包,並安裝它們的最新版本

pipenv 使用

創建環境,安裝指定版本的python

首先需要看一下當前目錄是否已經創建了虛擬環境,使用如下命令

$ pipenv -venv

結果如下

這說明當前的項目沒有創建虛擬環境,可以使用Pipenv 來創建一個虛擬環境:

$ pipenv --three

如果指定了 --two 或者 --three 選項參數,則會使用 python2 或者 python3 的版本安裝,否則將使用默認的 python 版本來安裝。當然也可以指定准確的版本信息:

$ pipenv install --python 3
$ pipenv install --python 3.8
$ pipenv install --python 2.7.14

pipenv 會自動掃描系統尋找合適的版本信息,如果找不到的話,同時又安裝了 pyenv 的話,則會自動調用 pyenv 下載對應版本的 python, 否則會報錯。

這時候在當前項目根目錄下會生成 Pipfile 和 Pipfile.lock 兩個環境初始化文件

進入|退出環境

進入環境
pipenv shell
退出環境
exit

安裝第三方包

測試安裝 selenium 包

pipenv install selenium

此時,Pipfile 里有最新安裝的包文件的信息,如名稱、版本等。用來在重新安裝項目依賴或與他人共享項目時,你可以用 Pipfile 來跟蹤項目依賴。

Pipfile 是用來替代原來的 requirements.txt 的,內容類似下面這樣。source 部分用來設置倉庫地址,packages 部分用來指定項目依賴的包,dev-packages 部分用來指定開發環境需要的包,這樣分開便於管理。

$ cat Pipfile[[source]]name = "pypi"url = "https://pypi.tuna.tsinghua.edu.cn/simple/"verify_ssl = true[packages]urllib3 = "*"selenium = "*"[dev-packages][requires]python_version = "3.8"

Pipfile.lock 則包含你的系統信息,所有已安裝包的依賴包及其版本信息,以及所有安裝包及其依賴包的 Hash 校驗信息。

$ Pipfile.lock{    "_meta": {        "hash": {            "sha256": "b02856f549692af24a14f79bfe022df973a9ea09ddfb4cbf7c7ecab5248ac322"        },        "pipfile-spec": 6,        "requires": {            "python_version": "3.8"        },        "sources": [            {                "name": "pypi",                "url": "https://pypi.tuna.tsinghua.edu.cn/simple/",                "verify_ssl": true            }        ]    },    "default": {        "selenium": {            "hashes": [                "sha256:2d7131d7bc5a5b99a2d9b04aaf2612c411b03b8ca1b1ee8d3de5845a9be2cb3c",                "sha256:deaf32b60ad91a4611b98d8002757f29e6f2c2d5fcaf202e1c9ad06d6772300d"            ],            "index": "pypi",            "version": "==3.141.0"        },        "urllib3": {            "hashes": [                "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df",                "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937"            ],            "index": "pypi",            "version": "==1.26.4"        }    },    "develop": {}}

那么Pipfile 和 Pipfile.lock 有什么用呢?
Pipfile 其實一個 TOML 格式的文件,標識了該項目依賴包的基本信息,還區分了生產環境和開發環境的包標識,作用上類似 requirements.txt 文件,但是功能更為強大。
Pipfile.lock 詳細標識了該項目的安裝的包的精確版本信息、最新可用版本信息和當前庫文件的 hash 值,顧明思義,它起了版本鎖的作用。
可以注意到當前 Pipfile.lock 文件中的 Selenium 版本標識為 ==3.141.0,意思是當前我們開發時使用的就是 3.141.0版本,它可以起到版本鎖定的功能。

舉個例子,剛才我們安裝了 Selenium 3.141.0 的版本,即目前(2021.5.22)的最新版本。但可能 Selenium 以后還會有更新,比如某一天 Selenium 更新到了 3.2 版本,這時如果我們想要重新部署本項目到另一台機器上,假如此時不存在 Pipfile.lock 文件,只存在 Pipfile文件,由於 Pipfile 文件中標識的 Selenium 依賴為 selenium= “*”,即沒有版本限制,它會默認安裝最新版本的 Selenium,即 3.2,但由於 Pipfile.lock 文件的存在,它會根據 Pipfile.lock 來安裝,還是會安裝 Selenium 3.141.0,這樣就會避免一些庫版本更新導致不兼容的問題。

安裝指定版本包

pipenv install selenium==3.141.0

安裝開發環境下的包

通常有一些Python包只在你的開發環境中需要,而不是在生產環境中,例如單元測試包。 加 --dev 表示包括 Pipfile 的 dev-packages 中的依賴。

pipenv install unittest --dev

django庫現在將只在開發虛擬環境中使用。如果你要在你的生產環境中安裝你的項目:

pipenv install

這不會安裝unittest包。
但是,如果有一個開發人員將你的項目克隆到自己的開發環境中,他們可以使用–dev標志,將django也安裝:

pipenv install –dev

也就是說一個–dev參數,幫你在同一個虛擬環境中又區分出了開發和非開發環境

卸載第三方包

pipenv uninstall selenium //或者 pipenv uninstall --all

更新安裝包

pipenv update selenium pipenv update # 更新所有安裝包

查看虛擬環境目錄

$ pipenv --venv

查看項目根目錄

$ pipenv --where

檢查軟件包的完整性

$ pipenv check

生成Pipfile.lock

有時候可能 Pipfile.lock 文件不存在或被刪除了,可以使用如下命令生成:
$ pipenv lock

修改Pipenv下載源

在使用pipenv install安裝的過程中如果下載比較慢可以在pipfile文件中指定下載源:

[[source]]name = "pypi"url = "https://pypi.tuna.tsinghua.edu.cn/simple/"verify_ssl = true[packages]urllib3 = "*"selenium = "*"[dev-packages][requires]python_version = "3.8"

Pip下載源

查看依賴樹

$ pipenv graph

鎖定版本

更新 lock 文件鎖定當前環境的依賴版本

$ pipenv lock

參考鏈接

Pipenv – 超好用的 Python 包管理工具
PyCharm+Pipenv虛擬環境開發和依賴管理的教程詳解


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM