2 回答

TA貢獻1934條經驗 獲得超2個贊
虛擬環境為您提供的獨立版本:
你得到一個單獨的
PATH
入口,讓不合格的命令行引用python
,pip
等等,都會參考選擇Python發布。如果您在系統上安裝了許多 Python 副本(在開發人員工作站上很常見),這會很方便。這意味著像這樣的 shebang 行將#!/usr/bin/env python
在 virtualenv 內部“做正確的事情”(至少在 Unix 或類 Unix 系統上)。您將獲得一個單獨的
site-packages
目錄,因此 Python 包(pip
在此環境中使用 eg安裝或在本地構建setup.py build
)被安裝到 virtualenv 本地而不是系統范圍的位置。這在核心 Python 解釋器安裝在不允許非特權用戶寫入文件的地方的系統上特別有用,因為它允許每個用戶擁有自己的私有 virtualenvs 并安裝了第三方軟件包,而無需使用sudo
或等效在系統范圍內安裝這些第三方軟件包。
......就是這樣。
虛擬環境不會將您與:
您的操作系統(Linux、Windows)或機器架構(x86)。
直接引用特定 Python 解釋器的腳本(例如
#!/usr/bin/python
)。系統上的非 Python 內容
PATH
(例如,通過操作系統的包管理器安裝的第三方程序或實用程序)。安裝到操作系統特定位置(例如
/usr/lib
、/usr/include
、/usr/local/lib
、/usr/local/include
)的非 Python 庫或頭文件。使用操作系統的包管理器(例如
apt
)而不是 Python 包管理器(pip
)安裝的 Python 包可能無法從 virtualenv 的site-packages
文件夾中看到,但此類包的“本機”部分(在 eg 中/usr/lib
)將(可能)仍然可見。

TA貢獻1951條經驗 獲得超3個贊
虛擬環境對apt
操作沒有影響。
從源代碼構建時,任何編譯的二進制文件都將鏈接到該環境的 python 二進制文件。因此,如果您的 virtualenv python 版本與系統版本不同,并且您使用系統 python(通常是路徑問題),則可能會遇到運行時鏈接錯誤。
至于隔離,這個相同的屬性(二進制兼容性)將您與可能會更改您的系統 python 二進制文件的系統升級隔離開來。通常我們在 2.x 和 3.x 中是穩定的,所以不太可能發生。但是有,而且可以。
當然,當在 virtualenv 中從源代碼構建時,已安裝的包會存放在該 virtualenv 中;沒有其他 python 二進制文件可以訪問這些包,除非您以奇怪的方式操作路徑或 PYTHONPATH。
添加回答
舉報