1. 程式人生 > 程式設計 >PyCharm+Pipenv虛擬環境開發和依賴管理的教程詳解

PyCharm+Pipenv虛擬環境開發和依賴管理的教程詳解

hello,小夥伴們大家好,今天給大家介紹的開源專案是Python虛擬環境管理工具,Pipenv是Python官方推薦的包管理工具。可以說,它集成了virtualenv,pippyenv三者的功能。其目的旨在集合了所有的包管理工具的長處,如: npm,yarn,composer等的優點。

Pipenv試圖解決的問題是多方面的:

我們不需要再手動建立虛擬環境,Pipenv會自動為我們建立,它會在某個特定的位置建立一個 virtualenv 環境,然後呼叫 pipenv shell 命令切換到虛擬環境。使用 requirements.txt 可能會導致一些問題,所以 Pipenv 使用 Pipfile

Pipfile.lock 來替代之,而且 Pipfile 如果不存在的話會自動建立,而且在安裝、升級、移除依賴包的時候會自動更新 PipfilePipfile.lock 檔案。雜湊值隨處可見。安全。自動公開安全漏洞。讓您深入瞭解依賴關係圖(例如$ pipenv graph)。隨時檢視圖形化的依賴關係。可通過自動載入 .env 讀取環境變數,簡化開發流程。

安裝Pipenv

MacOS

$ brew install pipenv

Debian

$ sudo apt install pipenv

Fedora

$ sudo dnf install pipenv

假如你電腦上有多個Python

版本,你可以指定Python版本安裝

$ python3 -m pip install 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 解除安裝當前所有的包,並安裝它們的最新版本

基本使用

我們可以建立一個專案,名稱 PipenvTest,然後新建一個 Python 指令碼,例如叫 tst_env.py,內容為:

import django
print(django.get_version())

結果如下:

1.12

我們可以看到系統安裝的 Django 版本是 1.12。但是我們想要本專案基於 Django 2.x 開發,當然我們可以選擇將系統的 Django 版本升級,但這樣又可能會影響其他的專案的執行,所以這並不是一個好的選擇。為了不影響系統環境的 Django 版本,所以我們可以用 Pipenv 來建立一個虛擬環境。

在該目錄下,輸入 pipenv 命令即可檢視命令的完整用法:

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

Options:
 --update  Update Pipenv & pip to latest.
 --where  Output project home information.
 --venv  Output virtualenv information.
 --py  Output Python interpreter information.
 --envs  Output Environment Variable options.
 --rm  Remove the virtualenv.
 --bare  Minimal output.
 --completion Output completion (to be eval'd).
 --man  Display manpage.
 --three / --two Use Python 3/2 when creating virtualenv.
 --python TEXT Specify which version of Python virtualenv should use.
 --site-packages Enable site-packages for the virtualenv.
 --jumbotron An easter egg,effectively.
 --version Show the version and exit.
 -h,--help Show this message and exit.

Usage Examples:
 Create a new project using Python 3.6,specifically:
 $ pipenv --python 3.6

 Install all dependencies for a project (including dev):
 $ pipenv install --dev

 Create a lockfile containing pre-releases:
 $ pipenv lock --pre

 Show a graph of your installed dependencies:
 $ pipenv graph

 Check your installed dependencies for security vulnerabilities:
 $ pipenv check

 Install a local setup.py into your virtual environment/Pipfile:
 $ pipenv install -e .

Commands:
 check Checks for security vulnerabilities and against PEP 508 markers
  provided in Pipfile.
 graph Displays currently–installed dependency graph information.
 install Installs provided packages and adds them to Pipfile,or (if none
  is given),installs all packages.
 lock Generates Pipfile.lock.
 open View a given module in your editor.
 run Spawns a command installed into the virtualenv.
 shell Spawns a shell within the virtualenv.
 uninstall Un-installs a provided package and removes it from Pipfile.
 update Uninstalls all packages,and re-installs package(s) in [packages]
  to latest compatible versions.

建立虛擬環境

第一步首先驗證一下當前的專案是沒有建立虛擬環境的,呼叫如下命令:

$ pipenv --venv

結果如下

No virtualenv has been created for this project yet!
Aborted!

這說明當前的專案尚未建立虛擬環境,接下來我們利用 Pipenv 來建立一個虛擬環境:

$ pipenv --three
或者
$ pipenv install --python 3.6

建立一個 Python3 的虛擬環境,–-three 代表建立一個 Python3 版本的虛擬環境,–-python 則可以指定特定的 Python 版本,當然如果指定了 --two 或者 --three 選項引數,則會使用 python2 或者 python3 的版本安裝,否則將使用預設的 python 版本來安裝。但前提你的系統必須裝有該版本的 Python 才可以。

當然也可以指定準確的版本資訊:

$ pipenv install --python 3
$ pipenv install --python 3.6
$ pipenv install --python 2.7.14

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

這時候在當前 new_env 環境下生成 Pipfile 和 Pipfile.lock 兩個環境初始化檔案。

接下來我們可以切換到該虛擬環境下執行命令,執行如下命令即可:

$ pipenv shell

使用Pipenv來安裝第三方包

$ pipenv install urllib3

此時,Pipfile 裡有最新安裝的包檔案的資訊,如名稱、版本等。用來在重新安裝專案依賴或與他人共享專案時,你可以用 Pipfile 來跟蹤專案依賴。

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

$ cat Pipfile

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
"urllib3" = "*"

[dev-packages]

[requires]
python_version = "3.6"

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

$ Pipfile.lock
{
 "_meta": {
 "hash": {
  "sha256": "af58f3510cb613d4d9241128f9a0ceb9bb936ad907543e23ad8317011dcb6715"
 },"pipfile-spec": 6,"requires": {
  "python_version": "3.6"
 },"sources": [
  {
  "name": "pypi","url": "https://pypi.org/simple","verify_ssl": true
  }
 ]
 },"default": {  
  "urllib3": {
  "hashes": [
  "sha256:a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf","sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5"
  ],"index": "pypi","version": "==1.23"
 }
 },"develop": {}
}

那麼到這裡有小夥伴可能就會問了, Pipfile 和 Pipfile.lock 有什麼用呢?

Pipfile 其實一個 TOML 格式的檔案,標識了該專案依賴包的基本資訊,還區分了生產環境和開發環境的包標識,作用上類似 requirements.txt 檔案,但是功能更為強大。Pipfile.lock 詳細標識了該專案的安裝的包的精確版本資訊、最新可用版本資訊和當前庫檔案的 hash 值,顧明思義,它起了版本鎖的作用,可以注意到當前 Pipfile.lock 檔案中的 Django 版本標識為 ==2.0.2,意思是當前我們開發時使用的就是 2.0.2 版本,它可以起到版本鎖定的功能。

舉個例子,剛才我們安裝了 Django 2.0.2 的版本,即目前(2018.2.27)的最新版本。但可能 Django 以後還會有更新,比如某一天 Django 更新到了 2.1 版本,這時如果我們想要重新部署本專案到另一臺機器上,假如此時不存在 Pipfile.lock 檔案,只存在 Pipfile檔案,由於 Pipfile 檔案中標識的 Django 依賴為 django = “*”,即沒有版本限制,它會預設安裝最新版本的 Django,即 2.1,但由於 Pipfile.lock 檔案的存在,它會根據 Pipfile.lock 來安裝,還是會安裝 Django 2.0.2,這樣就會避免一些庫版本更新導致不相容的問題。

Rember:任何情況下都不要手動修改 Pipfile.lock 檔案!

常用命令

我們可以使用 –-venv 引數來獲得虛擬環境路徑:

$ pipenv --venv
/Users/kennethreitz/.local/share/virtualenvs/test-Skyy4vre

專案路徑

$ pipenv --where
/Users/kennethreitz/Library/Mobile Documents/com~apple~CloudDocs/repos/kr/pipenv/test

找到Python直譯器:

$ pipenv --py
/Users/kennethreitz/.local/share/virtualenvs/test-Skyy4vre/bin/python

安裝指定軟體包:

$ pipenv install urllib3==1.22

安裝開發環境下的包:
通常有一些Python包只在你的開發環境中需要,而不是在生產環境中,例如單元測試包。 Pipenv使用--dev標誌區分兩個環境。
加 --dev 表示包括 Pipfile 的 dev-packages 中的依賴。

$ pipenv install django --dev
Installing pytest...
...
Adding pytest to Pipfile's [dev-packages]...

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

pipenv install

這不會安裝django包。

但是,如果有一個開發人員將你的專案克隆到自己的開發環境中,他們可以使用--dev標誌,將django也安裝:

pipenv install --dev

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

顯示依賴關係圖:

$ pipenv graph
requests==2.18.4
 - certifi [required: >=2017.4.17,installed: 2017.7.27.1]
 - chardet [required: >=3.0.2,<3.1.0,installed: 3.0.4]
 - idna [required: >=2.5,<2.7,installed: 2.6]
 - urllib3 [required: <1.23,>=1.21.1,installed: 1.22]

生成一個鎖檔案:

$ pipenv lock
Assuring all dependencies from Pipfile are installed...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Note: your project now has only default [packages] installed.
To install [dev-packages],run: $ pipenv install --dev

解除安裝第三方包:

$ pipenv uninstall urllib3 
或者
$ pipenv uninstall --all

更新安裝包

$ pipenv update urllib3
$ pipenv update # 更新所有安裝包

檢查軟體包的完整性
你是否擔心已安裝的軟體包有沒有安全漏洞?沒關係,pipenv 可以幫你檢查,執行下面的命令:

$ pipenv check
Checking PEP 508 requirements…
Passed!
Checking installed package safety…
All good!

產生 Pipfile.lock
有時候可能 Pipfile.lock 檔案不存在或被刪除了,這時候我們可以使用如下命令生成:

$ pipenv lock

以上便是一些常用的 Pipenv 命令,如果要檢視更多用法可以參考其官方文件:https://docs.pipenv.org/#pipenv-usage。

修改下載源Pipenv

如果你覺得在使用pipenv install安裝的過程中下載比較慢可以指下載源:

[[source]]
name = "pypi"
url = "https://pypi.tuna.tsinghua.edu.cn/simple/"
verify_ssl = true

[dev-packages]

[packages]
requests = "*"
paho-mqtt = "*"
pymongo = "*"
can = "*"
crypto = "*"
gvent = "*"
gevent = "*"

[requires]
python_version = "3.7"

只需要修改Pipfile即可。

Pip下載源

阿里: http://mirrors.aliyun.com/pypi/simple/
豆瓣: http://pypi.douban.com/simple/
清華: https://pypi.tuna.tsinghua.edu.cn/simple

PyCharm配置Pipenv

新增Python直譯器

PyCharm+Pipenv虛擬環境開發和依賴管理的教程詳解

選擇Pipenv 虛擬環境
Base interpreter為本機系統中的python直譯器路徑
Pipenv executable表示pipenv,命令的環境變數路徑

PyCharm+Pipenv虛擬環境開發和依賴管理的教程詳解

在專案下選擇剛剛新建好的Pipenv名稱。

PyCharm+Pipenv虛擬環境開發和依賴管理的教程詳解

專案地址:https://github.com/pypa/pipenv

總結

到此這篇關於PyCharm+Pipenv虛擬環境開發和依賴管理的文章就介紹到這了,更多相關PyCharm+Pipenv虛擬環境作開發和依賴管理內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!