Python基礎(chǔ)42-虛擬環(huán)境(創(chuàng)建/激活/操作/刪除-virtualenv、Pycharm、virtualenvwrapper、pipenv)

1 概念

  • 一個(gè)獨(dú)立的局部的 Python 環(huán)境
  • 完全模擬系統(tǒng)全局 Python 環(huán)境的使用,如安裝、卸載包到邏輯操作等

2 作用

  • 讓項(xiàng)目運(yùn)行在一個(gè)獨(dú)立的局部的 Python 環(huán)境中,使采用不同環(huán)境的項(xiàng)目互不干擾。

3 安裝虛擬環(huán)境

安裝過(guò)程中,如果出現(xiàn)如下 error 信息是,可以嘗試切換源重新下載
阿里源,不行

$ pip install virtualenv                                                     
Looking in indexes: http://pypi.douban.com/pypi/simple
Collecting virtualenv
  The repository located at pypi.douban.com is not a trusted or secure host and is being ignored. If this repository is available via HTTPS we recommend you use HTTPS instead, otherwise you may silence this warning and allow it anyway with '--trusted-host pypi.douban.com'.
  Could not find a version that satisfies the requirement virtualenv (from versions: )
No matching distribution found for virtualenv

豆瓣源,不行

$ pip install virtualenv --trusted-host pypi.douban.com                      
Looking in indexes: http://pypi.douban.com/pypi/simple
Collecting virtualenv
  Could not find a version that satisfies the requirement virtualenv (from versions: )
No matching distribution found for virtualenv

官方源,不行

$ pip install virtualenv -i https://pypi.python.org/simple/                  
Looking in indexes: https://pypi.python.org/simple/
Collecting virtualenv
  Downloading https://files.pythonhosted.org/packages/b6/30/96a02b2287098b23b875bc8c2f58071c35d2efe84f747b64d523721dc2b5/virtualenv-16.0.0-py2.py3-none-any.whl (1.9MB)
    4% |█▌                              | 92kB 2.7kB/s eta 0:11:08Exception:
Traceback (most recent call last):
 ....
pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.

清華源,可以

$ pip install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple/      
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple/
Collecting virtualenv
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/ed/ea/e20b5cbebf45d3096e8138ab74eda139595d827677f38e9dd543e6015bdf/virtualenv-15.2.0-py2.py3-none-any.whl (2.6MB)
    100% |████████████████████████████████| 2.6MB 4.1MB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-15.2.0

4 使用虛擬環(huán)境

4.1 創(chuàng)建一個(gè)局部的隔離的虛擬環(huán)境

4.1.1 創(chuàng)建命令:virtualenv 虛擬環(huán)境名稱(chēng)

virtualenv ENV
  • cd 到存放虛擬環(huán)境的的地址
  • 執(zhí)行命令virtualenv ENV,創(chuàng)建名為ENV 的虛擬環(huán)境
% cd /Users/xxx/Desktop/testvirtuals                    

% virtualenv virtual1                   
Using base prefix '/usr/local/Cellar/python3/3.6.4_1/Frameworks/Python.framework/Versions/3.6'
New python executable in /Users/xxx/Desktop/testvirtuals/virtual1/bin/python3.6
Also creating executable in /Users/xxx/Desktop/testvirtuals/virtual1/bin/python
Installing setuptools, pip, wheel...done.

創(chuàng)建虛擬環(huán)境結(jié)果


注意:

  • Using base prefix 使用的是3.6版本環(huán)境,原因是 virtualenv 安裝位置就在3.6下,所以默認(rèn)使用的是其安裝位置版本的 Python 環(huán)境
  • 虛擬環(huán)境文件包括:Python解析器,包管理工具(setuptools, pip, wheel),三方包等
  • 即使創(chuàng)建的 bin 腳本命令集含有 python 和 python3兩個(gè)腳本,實(shí)際它們的版本都是3.6,這個(gè)防止使用者理解不足導(dǎo)致已為使用 python 命令時(shí)是使用 Python2.x 版本。
% /Users/xxx/Desktop/testvirtuals/virtual1/bin/python3 --version
Python 3.6.4

% /Users/xxx/Desktop/testvirtuals/virtual1/bin/python --version
Python 3.6.4

4.1.2 指定 Python 版本創(chuàng)建虛擬環(huán)境

可選參數(shù):-p
指定 Python2.x 版本創(chuàng)建虛擬環(huán)境

virtualenv -p /usr/local/bin/python2.7 testvirtual2

執(zhí)行效果

$ virtualenv -p /usr/local/bin/python2.7 ENV
Running virtualenv with interpreter /usr/local/bin/python2.7
New python executable in /Users/minyu_leung/Desktop/virtual2/ENV/bin/python2.7
Also creating executable in /Users/minyu_leung/Desktop/virtual2/ENV/bin/python
Installing setuptools, pip, wheel...done.

4.1.3 是否繼承系統(tǒng)三方庫(kù) --system-site-packages

添加參數(shù)--system-site-packages,項(xiàng)目檢索庫(kù)的時(shí)候,也會(huì)到系統(tǒng)的三方庫(kù)中找
不添加時(shí),默認(rèn)只到虛擬環(huán)境中查找?guī)?/p>

virtualenv --system-site-packages ENV

4.2 激活/退出 虛擬環(huán)境

在 Mac 下,激活所創(chuàng)建的虛擬環(huán)境步驟:

  1. cd 到虛擬環(huán)境文件夾目錄
cd /Users/xxx/Desktop/testvirtuals/virtual1
  1. 執(zhí)行命令 source bin/activate,shell 會(huì)打印出已激活的虛擬環(huán)境名稱(chēng)
$ source bin/activate
(virtual1)
帶 source 命令
  1. 驗(yàn)證當(dāng)前確實(shí)在已激活的虛擬環(huán)境中,執(zhí)行命令 pip --version 和 pip list


    每次打印后都會(huì)提示(virtual1),所在環(huán)境是虛擬環(huán)境
  2. 退出虛擬環(huán)境,在激活的虛擬環(huán)境中,執(zhí)行命令 deactivate

$ deactivate
注意,不用帶 source 命令
  1. 驗(yàn)證已經(jīng)退出,執(zhí)行命令 pip --version 和 pip list


    結(jié)果都是來(lái)自系統(tǒng)環(huán)境
  2. 注意:如果系統(tǒng)是 Windows 的話,則不需要帶上 source 命令,直接 cd 進(jìn)入Scripts腳本文件夾中,然后執(zhí)行 activate 和 deactivate 腳本即可。與 Mac 不同的是,虛擬環(huán)境的 bin 目錄下只有 activate 腳本,沒(méi)有 deactivate 腳本。


    Windows 下的虛擬環(huán)境 Scripts 文件夾文件目錄
Mac 虛擬環(huán)境 bin 目錄文件

使用文檔中也有說(shuō) source 使用原因:

4.3 在激活狀態(tài)下,操作

  1. 操作三方塊
    pip install requests
  2. 執(zhí)行 py 文件
    python xx.py

以上操作均作用在虛擬環(huán)境中。

4.4 刪除虛擬環(huán)境

  • 直接刪除虛擬環(huán)境所在目錄即

4.5 項(xiàng)目交接

場(chǎng)景:確保共享的項(xiàng)目能夠在其他電腦上正常運(yùn)行
解決:

  1. 方案一:
  • 連同虛擬環(huán)境和項(xiàng)目一起拷貝給他人
  1. 方案二:
  • 在虛擬環(huán)境中,凍結(jié)依賴(lài)需求文本
  • 把項(xiàng)目和依賴(lài)需求文本給他人
  • 他人在本地創(chuàng)建一個(gè)新的虛擬環(huán)境,并根據(jù)依賴(lài)需求文本安裝相關(guān)庫(kù)

技能點(diǎn)

  • 虛擬環(huán)境的創(chuàng)建
  • 虛擬環(huán)境的激活
  • 操作虛擬環(huán)境
  • 凍結(jié)項(xiàng)目需求文本 pip freeze > requirements.txt
  • 根據(jù)需求文本,安裝項(xiàng)目依賴(lài)庫(kù) pip install -r requirements.txt (在激活的虛擬環(huán)境中)

5 Pycharm 中使用虛擬環(huán)境

  1. 創(chuàng)建項(xiàng)目


  2. 在創(chuàng)建項(xiàng)目時(shí),使用虛擬環(huán)境


創(chuàng)建后,目錄結(jié)構(gòu)


  1. 在項(xiàng)目偏好設(shè)置里可以切換環(huán)境和安裝需要的庫(kù)


總結(jié):
IDE 讓虛擬環(huán)境的使用更加方便,圖形化創(chuàng)建和切換,包的管理等。讓程序員更關(guān)注項(xiàng)目的開(kāi)發(fā)而非各種命令的記憶。

6 虛擬環(huán)境進(jìn)階使用

6.1 集中式虛擬環(huán)境管理

virtualenvwrapper
使用文檔

  1. 通過(guò)virtualenvwrapper創(chuàng)建的虛擬環(huán)境都會(huì)統(tǒng)一存放到指定位置統(tǒng)一管理
  2. 方便在多個(gè)虛擬環(huán)境間切換
  3. 更加方便的去使用 virtualenv
  • 快速創(chuàng)建虛擬環(huán)境并激活
mkvirtualenv venv1
  • 快速在多個(gè)虛擬環(huán)境中切換
workon venv2
  • 快速關(guān)閉虛擬環(huán)境
deactivate
  • 快速刪除虛擬環(huán)境
rmvirtualenv env1
  • 查看所有創(chuàng)建的虛擬環(huán)境
lsvirtualenv

弊端

  • 只是對(duì) virtualenv 的使用封裝,包的安裝及虛擬環(huán)境的操作依然是分離的。
  • 并未具備對(duì)項(xiàng)目包的依賴(lài)管理及需求文本的生成操作封裝

6.2 更加基于項(xiàng)目的虛擬環(huán)境管理

6.2.1 pipenv 使用優(yōu)點(diǎn)

  1. 推薦使用:pipenv,是 pip + virtualenv 結(jié)合體,解決了virtualenvwrapper弊端
  2. 會(huì)自動(dòng)幫你創(chuàng)建虛擬環(huán)境,以及安裝三方庫(kù)
  3. 會(huì)自動(dòng)的記錄你的項(xiàng)目依賴(lài)的所有三方庫(kù)
  4. 使用 pipfile 和 pipfile.lock取代了 requirements.txt

使用文檔
使用文檔2

pipenv 命令使用一覽


pipenv 命令都是參照項(xiàng)目中的 Pipfile 位置和內(nèi)容操作的,類(lèi)似 cocoapods 的 pod 命令參照podfile文件操作。

6.2.2 使用步驟

6.2.2.1 創(chuàng)建虛擬環(huán)境

1. cd 到項(xiàng)目文件夾目錄下
2. 在該目錄下執(zhí)行命令
pipenv --two # 指定參照Python版本
或
pipenv --three

3. 查看相關(guān)信息
查看位置:pipenv --where
查看虛擬環(huán)境位置:pipenv --venv
查看解析器信息:pipenv --py

6.2.2.2 激活虛擬環(huán)境

pipenv shell

6.2.2.3 在激活狀態(tài)下操作

  1. 執(zhí)行 py 文件,python xx.py ,其中 python 指的是虛擬環(huán)境 Python版本
  2. 安裝包
pipenv install requests

注意:不要使用 pip install 命令,使用的話雖然可以在虛擬環(huán)境中安裝對(duì)應(yīng)的包,但是不會(huì)更新 PIPfile 和 PIPfile.lock

命令:pipenv install [三方庫(kù)名]
作用:
一、檢測(cè)當(dāng)前項(xiàng)目對(duì)應(yīng)的虛擬環(huán)境是否存在,不存在則創(chuàng)建。如果當(dāng)前項(xiàng)目已經(jīng)存在 Pipfile 和 Pipfile.lock 文件,則參照這兩個(gè)文件內(nèi)容創(chuàng)建虛擬環(huán)境并安裝文件指定的三方庫(kù)
二、在虛擬環(huán)境中安裝指定三方庫(kù),如果沒(méi)有指定,則不安裝
三、在項(xiàng)目目錄下,通過(guò) Pipfile 和 Pipfile.lock 記錄當(dāng)下已經(jīng)安裝的三方庫(kù)信息

  1. 查看包的依賴(lài)結(jié)構(gòu)
pipenv graph
  1. 卸載包
pipenv uninstall requests

6.2.2.4 退出虛擬環(huán)境

exit
或
直接關(guān)閉 shell 窗口

6.2.2.5 刪除虛擬環(huán)境

先 cd 進(jìn)入 Pipfile 文件目錄位置
pipenv --rm

6.3 項(xiàng)目交接

6.3.1 上傳項(xiàng)目時(shí),應(yīng)該包含的文件有?

應(yīng)該包括文件有:

  1. 包和模塊源碼
  2. Pipfile 和 Pipfile.lock

6.3.2 拿到共享的項(xiàng)目后如何操作?

操作步驟:

  1. cd 進(jìn)入獲取的項(xiàng)目文件夾目錄內(nèi)
  2. 檢查項(xiàng)目是否具有Pipfile 和 Pipfile.lock 文件 (此處應(yīng)該是必須有的,因?yàn)槭菆?zhí)行上述分享操作的人給你的項(xiàng)目嘛?(?*)啦啦)
  3. 執(zhí)行命令:
pipenv install
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容