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)境
- virtualenv,就是一個(gè)三方包
- 安裝命令,pip install virtualenv
- 使用文檔,https://virtualenv.pypa.io/en/stable/userguide/
安裝過(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)境步驟:
- cd 到虛擬環(huán)境文件夾目錄
cd /Users/xxx/Desktop/testvirtuals/virtual1
- 執(zhí)行命令 source bin/activate,shell 會(huì)打印出已激活的虛擬環(huán)境名稱(chēng)
$ source bin/activate
(virtual1)

-
驗(yàn)證當(dāng)前確實(shí)在已激活的虛擬環(huán)境中,執(zhí)行命令 pip --version 和 pip list
每次打印后都會(huì)提示(virtual1),所在環(huán)境是虛擬環(huán)境 退出虛擬環(huán)境,在激活的虛擬環(huán)境中,執(zhí)行命令 deactivate
$ deactivate

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

使用文檔中也有說(shuō) source 使用原因:
4.3 在激活狀態(tài)下,操作
- 操作三方塊
pip install requests - 執(zhí)行 py 文件
python xx.py
以上操作均作用在虛擬環(huán)境中。
4.4 刪除虛擬環(huán)境
- 直接刪除虛擬環(huán)境所在目錄即
4.5 項(xiàng)目交接
場(chǎng)景:確保共享的項(xiàng)目能夠在其他電腦上正常運(yùn)行
解決:
- 方案一:
- 連同虛擬環(huán)境和項(xiàng)目一起拷貝給他人
- 方案二:
- 在虛擬環(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)境
-
創(chuàng)建項(xiàng)目
-
在創(chuàng)建項(xiàng)目時(shí),使用虛擬環(huán)境
創(chuàng)建后,目錄結(jié)構(gòu)

-
在項(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)境管理
- 通過(guò)virtualenvwrapper創(chuàng)建的虛擬環(huán)境都會(huì)統(tǒng)一存放到指定位置統(tǒng)一管理
- 方便在多個(gè)虛擬環(huán)境間切換
- 更加方便的去使用 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)
- 推薦使用:pipenv,是 pip + virtualenv 結(jié)合體,解決了virtualenvwrapper弊端
- 會(huì)自動(dòng)幫你創(chuàng)建虛擬環(huán)境,以及安裝三方庫(kù)
- 會(huì)自動(dòng)的記錄你的項(xiàng)目依賴(lài)的所有三方庫(kù)
- 使用 pipfile 和 pipfile.lock取代了 requirements.txt
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)下操作
- 執(zhí)行 py 文件,python xx.py ,其中 python 指的是虛擬環(huán)境 Python版本
- 安裝包
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ù)信息

- 查看包的依賴(lài)結(jié)構(gòu)
pipenv graph

- 卸載包
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)該包括文件有:
- 包和模塊源碼
- Pipfile 和 Pipfile.lock
6.3.2 拿到共享的項(xiàng)目后如何操作?
操作步驟:
- cd 進(jìn)入獲取的項(xiàng)目文件夾目錄內(nèi)
- 檢查項(xiàng)目是否具有Pipfile 和 Pipfile.lock 文件 (此處應(yīng)該是必須有的,因?yàn)槭菆?zhí)行上述分享操作的人給你的項(xiàng)目嘛?(?*)啦啦)
- 執(zhí)行命令:
pipenv install







