欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python 虛擬環(huán)境工作原理解析

 更新時間:2020年12月24日 09:55:37   作者:悟空小飯  
這篇文章主要介紹了Python 虛擬環(huán)境工作原理解析,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

Python 的虛擬環(huán)境用來創(chuàng)建一個相對獨立的執(zhí)行環(huán)境,尤其是一些依賴的三方包,最常見的如不同項目依賴同一個但是不同版本的三方包,而且,在虛擬環(huán)境中的安裝包不會影響到系統(tǒng)的安裝包。

不過,其具體的工作原理是怎樣的,這里詳細介紹。

簡介

幾乎每個語言都包含自己的包管理工具,這是一個非常復(fù)雜的話題,而不同語言選擇的實現(xiàn)又略有區(qū)別,都會做一些選擇和取舍。而 Python 的包管理解決方案很多,例如 pip、virtualenv、pyenv 等等。

不過 Python 語言本身的機制決定了其原理一樣。

使用

比較常用的是 virtualenv 工具,可以參考 Guide to Python 中的詳細介紹,另外,Python3 也提供了自己的虛擬環(huán)境創(chuàng)建模塊,在創(chuàng)建完成后基本都是通過一個腳本啟用獨立環(huán)境。

例如,如下是使用 virtualenv 以及 venv 的虛擬環(huán)境創(chuàng)建過程。

$ mkdir /tmp/project && cd /tmp/project

$ virtualenv --no-site-packages foobar
$ python3 -m venv foobar

然后,就可以通過 source foobar/bin/activate 命令激活新環(huán)境。

激活腳本

所謂的獨立環(huán)境,無非就是解決兩個問題:A) 執(zhí)行 Python 解析器所使用的版本;B) 使用獨立的包。其中前者,在 Linux 主要是通過 PATH 環(huán)境變量設(shè)置,在 activate 腳本中有如下的內(nèi)容。

VIRTUAL_ENV="/tmp/project/foobar"
export VIRTUAL_ENV

_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH

也就是將創(chuàng)建的目錄添加到 PATH 環(huán)境變量最開始,那么就會優(yōu)先查找該路徑,這樣就解決了 python 解析器獨立的問題。

工作原理

如果要使用獨立的包,那么關(guān)鍵就是如何在通過 import 導(dǎo)入時查找到所需的包。

包的查找順序可以查看Python 模塊簡介 中的介紹,簡單來說,就是先查看是否是內(nèi)置模塊,然后再從 sys.path 列表指定的地址中搜索。所以,這里的關(guān)鍵就是 sys.path 列表的生成。

關(guān)于 sys.prefix

在 Python 啟動的時候,會先加載一個強依賴的 os.py 包,而查找這個包是根據(jù)解析器的當前路徑,以及固定的查找規(guī)則來實現(xiàn)的。

簡單來說,就是在當前路徑加上 lib/python${VERSION}/os.py 逐層向上查找,注意,如果是 64 位的操作系統(tǒng),那么會使用 lib64 替換掉之前的 lib 路徑。

例如,默認的 Python3 的解析器路徑為 /usr/bin/python3.6 ,那么基礎(chǔ)路徑是 /usr/bin/ ,所以,其查找順序為。

/usr/bin/lib64/python3.6/os.py
/usr/lib64/python3.6/os.py
/lib64/python3.6/os.py

只要在任意路徑上找到 os.py 包,那么就會退出查找,并設(shè)置好 sys.prefix 變量,詳細可以通過 strace python 查看,會有如下的搜索路徑。

stat("/usr/bin/Modules/Setup", 0x7fffb7146300) = -1 ENOENT (No such file or directory)
stat("/usr/bin/lib64/python2.7/os.py", 0x7fffb71462f0) = -1 ENOENT (No such file or directory)
stat("/usr/bin/lib64/python2.7/os.pyc", 0x7fffb71462f0) = -1 ENOENT (No such file or directory)
stat("/usr/lib64/python2.7/os.py", {st_mode=S_IFREG|0644, st_size=25910, ...}) = 0

在查找到 os.py 之后,會將該路徑設(shè)置為 sys.prefix 變量,然后解析器就會到 ${sys.prefix}/lib/python${VERSION} 目錄下查找包。

總結(jié)

那么其工作原理就是,將 python 解析器保存在 ${VENV_PATH}/bin/python ,然后創(chuàng)建 ${VENV_PATH}/lib/python${VERSION} 目錄,并將相關(guān)的文件復(fù)制到該目錄下,可以復(fù)制文件,也可以使用軟連接。

其它

如上,如果是 Python3 就可以直接使用內(nèi)置的 venv 模塊,其原理與上述的相同,同時通過 pyvenv.cfg 配置文件來標識原始的 home 位置,該文件的內(nèi)容如下。

home = /usr/bin
include-system-site-packages = false
version = 3.6.8

如果 include-system-site-packagestrue ,解釋器啟動時就會將系統(tǒng)的庫添加到 sys.path 里面,這樣在虛擬環(huán)境就可以 import 系統(tǒng)中安裝的包了。

注意,Python3 提供的 venv 模塊只能根據(jù)當前版本創(chuàng)建,不能支持 Python2 。

參考 Virtualenv 官方文檔,細節(jié)可以參考該文檔。

Creation of virtual environments Python3 提供的 venv 介紹,包括常見參數(shù)以及配置文件。

 

← Older

到此這篇關(guān)于Python 虛擬環(huán)境工作原理解析的文章就介紹到這了,更多相關(guān)Python 虛擬環(huán)境原理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • selenium自動化測試框架方式

    selenium自動化測試框架方式

    這篇文章主要介紹了selenium自動化測試框架方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2020-02-02
  • pytorch finetuning 自己的圖片進行訓(xùn)練操作

    pytorch finetuning 自己的圖片進行訓(xùn)練操作

    這篇文章主要介紹了pytorch finetuning 自己的圖片進行訓(xùn)練操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 關(guān)于tf.TFRecordReader()函數(shù)的用法解析

    關(guān)于tf.TFRecordReader()函數(shù)的用法解析

    今天小編就為大家分享一篇關(guān)于tf.TFRecordReader()函數(shù)的用法解析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python使用0初始化字典的常用方法小結(jié)

    Python使用0初始化字典的常用方法小結(jié)

    字典(Dictionary)是?Python?中非常常用的數(shù)據(jù)結(jié)構(gòu)之一,它可以將鍵(Key)映射到值(Value),本文將介紹多種在?Python?中使用?0?初始化字典的方法,希望對大家有所幫助
    2024-02-02
  • Python遠程linux執(zhí)行命令實現(xiàn)

    Python遠程linux執(zhí)行命令實現(xiàn)

    這篇文章主要介紹了Python遠程linux執(zhí)行命令實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • pycharm中import導(dǎo)入包呈現(xiàn)灰色的問題及解決

    pycharm中import導(dǎo)入包呈現(xiàn)灰色的問題及解決

    這篇文章主要介紹了pycharm中import導(dǎo)入包呈現(xiàn)灰色的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 利用Pandas索引和選取數(shù)據(jù)方法詳解

    利用Pandas索引和選取數(shù)據(jù)方法詳解

    使用Pandas做數(shù)據(jù)分析的時候,用的最多的功能恐怕就是對于數(shù)據(jù)集的索引,選組數(shù)據(jù)子集。Pandas庫提供了很多非常實用的方法,了解并熟練使用這些方法而不是用for循環(huán)的方法將會事半功倍。在這一篇文章中,我們將著重介紹這些方法
    2021-10-10
  • Python中的哈希算法模塊hashlib詳解

    Python中的哈希算法模塊hashlib詳解

    這篇文章主要介紹了Python中的哈希算法模塊hashlib詳解,hashlib模塊實現(xiàn)了多種哈希算法,包括MD5以及SHA家族的算法,通過algorithms_guaranteed可以查看hashlib中封裝的所有算法,需要的朋友可以參考下
    2023-08-08
  • 在Python中使用sort()方法進行排序的簡單教程

    在Python中使用sort()方法進行排序的簡單教程

    這篇文章主要介紹了在Python中使用sort()方法進行排序的簡單教程,是Python學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • Python實現(xiàn)可獲取網(wǎng)易頁面所有文本信息的網(wǎng)易網(wǎng)絡(luò)爬蟲功能示例

    Python實現(xiàn)可獲取網(wǎng)易頁面所有文本信息的網(wǎng)易網(wǎng)絡(luò)爬蟲功能示例

    這篇文章主要介紹了Python實現(xiàn)可獲取網(wǎng)易頁面所有文本信息的網(wǎng)易網(wǎng)絡(luò)爬蟲功能,涉及Python針對網(wǎng)頁的獲取、字符串正則判定等相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01

最新評論