python 虚拟环境原理_Python 虚拟环境
建議在開發環境和生產環境下都使用虛擬環境來管理項目的依賴。 - Flask
背景
Python 應用通常會使用一些第三方的軟件包和模塊。不同的應用可能會依賴不同版本的同一個軟件包,或者依賴不同的 Python 版本。
設想這樣的場景:
小白之前有一個 Flask 0.10 做的網站并且一直維護著?,F在老板要求在同一個機器上使用最新版的 Flask 1.1 再做一個網站,兩個網站以后都要用。這樣,在機器上安裝 Flask 0.10 或者 Flask 1.1 都會導致某一個網站無法運行。
為了解決類似這樣的問題,虛擬環境上場了。
究竟什么是虛擬環境
每個虛擬環境都是一個獨立于操作系統和其他虛擬環境的,被隔離的(isolated), Python 環境。
它擁有自己的 Python 二進制文件,并且擁有獨立的已安裝軟件包集(site-package)。
正是因為每個虛擬環境的 Python 和 site-package 都是獨立的,我們只要為每個項目配置自己的虛擬環境,然后就可以在項目各自的環境中安裝各自依賴的軟件包,而不用擔心這些軟件包和其他項目是否沖突了。
如何配置虛擬環境
開始配置之前,我們需要選擇一個配置環境的工具包。
選擇工具包
Python 配置虛擬環境的包有很多,最受好評的莫過于 virtualenv,甚至從 Python 3.3 開始,virtualenv 的一個功能子集被集成到了 Python 標準庫的 venv 模塊中。
virtualenv 和 venv 都是很好的選擇,二者各有優劣。
virtualenv
venv
優勢
1. 控制版本,可以將虛擬環境配置成不同于系統 Python 版本的其他版本
2. 創建 bootstrap 插件
3. 可重定位
4. Python 3.3 之前版本的首選
1. Python 3.3 以后內置于標準庫
2. 濃縮了 virtualenv 的精華
劣勢
1. 屬于第三方庫,使用前需要在系統中 pip install virtualenv
2. 功能冗余,小型項目用不太到很多功能
1. 不能將虛擬環境配置成不同于系統 Python 版本的其他版本
2. Python 3.3 之前版本無法使用
建議是,小型且對 Python 版本無特殊需求的項目,venv 足夠了,其他情況用 virtualenv。
使用方法
venv
下為 linux/MacOS 示例,Windows 僅個別目錄或文件名不同,原理一致,具體可參考官方文檔。
假設項目的根目錄為 /home/username/application/
進入項目根目錄
$ cd /home/username/application/
復制代碼創建虛擬環境
$ python3 -m venv 虛擬環境名
復制代碼
例如,
$ python3 -m venv test-env
復制代碼
這樣在根目錄中會出現一個 test-env 的目錄,如下
application/
/test-env/
/bin/
/include/
/lib/
/share/
/lib64
/pyvenv.cfg
復制代碼
這個 test-env 目錄就是新創建的虛擬環境了。
進入虛擬環境
運行剛創建的虛擬環境目錄中 /bin 中的 activate 即可
$ source /path/to/虛擬環境名/bin/activate
復制代碼
如
$ source test-env/bin/activate
復制代碼
或
$ . test-env/bin/activate
復制代碼
這時,你會發現 Terminal 提示符多了個前綴 (test-env),括號中的內容代表當前的虛擬環境
(test-env) $
復制代碼
可以通過 pip list 列出所有安裝的軟件包,會發現只有這倆
$ pip list
pip (9.0.1)
setuptools (39.0.1)
復制代碼
當前狀態下,cd 不會改變虛擬環境的狀態,哪怕是出了項目根目錄。
在虛擬環境中,就可以肆無忌憚的 pip install 了。
退出虛擬環境
輸入 deactivate (或關閉 Terminal) 即可。這時再輸入 pip list 又會顯示系統環境所有安裝的軟件包了,而且提示符前面的 (test-env) 也沒了。
(test-env) $ deactivate
$ pip list
Package Version
--------------------- -------------------
apturl 0.5.2
asn1crypto 0.24.0
Brlapi 0.6.6
certifi 2019.9.11
...
復制代碼刪除虛擬環境
只需將之前創建的 test-env 目錄整體刪掉就好了。
注意,刪除虛擬環境會連同之前在虛擬環境中安裝的所有軟件包一起刪除。
$ rm -r /path/to/虛擬環境名
復制代碼
virtualenv
與 venv 大同小異,具體可參考官方文檔。
假設項目的根目錄為 /home/username/application/
安裝
$ pip install virtualenv
復制代碼進入項目根目錄
$ cd /home/username/application/
復制代碼創建虛擬環境
$ virtualenv 虛擬環境名
復制代碼進入虛擬環境
$ source /path/to/虛擬環境名/bin/activate
復制代碼退出虛擬環境
$ deactivate
復制代碼刪除虛擬環境
$ rm -r /path/to/虛擬環境名
復制代碼
說個 Bug
如果你的系統是 Ubuntu ,那么,在虛擬環境中使用 pip list 或 pip freeze 時,會多處一項 pkg-resources (0.0.0) 或 pkg-resources==0.0.0。
看似是個不起眼的小 bug,但是,當用 pip freeze > requirements.txt 生成當前項目依賴時,如果不將 pkg-resources==0.0.0 這條刪除,在下次使用 pip install -r requirements.txt 時,就會報錯說找不到 pkg-resources==0.0.0 啥啥啥的。別問我是怎么知道這個細節的。。
總結
以上是生活随笔為你收集整理的python 虚拟环境原理_Python 虚拟环境的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人工神经网络心得体会_卷积神经网络学习心
- 下一篇: python123输出hello wor