日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

瀏覽:31日期:2022-07-01 13:19:25

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

不過(guò),其具體的工作原理是怎樣的,這里詳細(xì)介紹。

簡(jiǎn)介

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

不過(guò) Python 語(yǔ)言本身的機(jī)制決定了其原理一樣。

使用

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

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

$ mkdir /tmp/project && cd /tmp/project$ virtualenv --no-site-packages foobar$ python3 -m venv foobar

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

激活腳本

所謂的獨(dú)立環(huán)境,無(wú)非就是解決兩個(gè)問(wèn)題:A) 執(zhí)行 Python 解析器所使用的版本;B) 使用獨(dú)立的包。其中前者,在 Linux 主要是通過(guò) 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)境變量最開(kāi)始,那么就會(huì)優(yōu)先查找該路徑,這樣就解決了 python 解析器獨(dú)立的問(wèn)題。

工作原理

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

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

關(guān)于 sys.prefix

在 Python 啟動(dòng)的時(shí)候,會(huì)先加載一個(gè)強(qiáng)依賴的 os.py 包,而查找這個(gè)包是根據(jù)解析器的當(dāng)前路徑,以及固定的查找規(guī)則來(lái)實(shí)現(xiàn)的。

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

例如,默認(rèn)的 Python3 的解析器路徑為 /usr/bin/python3.6 ,那么基礎(chǔ)路徑是 /usr/bin/ ,所以,其查找順序?yàn)椤?/p>

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

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

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 之后,會(huì)將該路徑設(shè)置為 sys.prefix 變量,然后解析器就會(huì)到 ${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 模塊,其原理與上述的相同,同時(shí)通過(guò) pyvenv.cfg 配置文件來(lái)標(biāo)識(shí)原始的 home 位置,該文件的內(nèi)容如下。

home = /usr/bininclude-system-site-packages = falseversion = 3.6.8

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

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

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

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

← Older

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

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品调教视频| 福利视频一区| 91综合网人人| 国产精品v亚洲精品v日韩精品| 久久高清国产| 欧美freesex黑人又粗又大| 久久av偷拍| 国产精品sss在线观看av| 日韩av资源网| 日韩国产91| 日本不卡视频在线观看| 久久xxxx精品视频| 亚洲精品伊人| 亚洲精品免费观看| 97成人超碰| 欧美亚洲一区二区三区| 国产欧美久久一区二区三区| 久久精品xxxxx| 亚洲色图网站| 日韩在线视频一区二区三区| 在线观看一区| 久久国产精品色av免费看| 日韩有吗在线观看| 婷婷亚洲成人| 欧美一级全黄| 国产精品99久久免费| 麻豆精品视频在线观看视频| 国产精品2023| 亚洲综合色婷婷在线观看| 免费看日韩精品| 亚洲精品在线a| 国产精品2023| 欧美激情国产在线| 欧美成人精品| 欧美成人亚洲| 午夜精品影视国产一区在线麻豆| 无码日韩精品一区二区免费| 午夜电影一区| 高清在线一区| 香蕉精品久久| 日韩精选在线| 久久永久免费| 亚洲激情av| 日本成人在线视频网站| 国产精品毛片久久久| 国产suv精品一区二区四区视频 | 国产尤物精品| 亚洲欧美日韩精品一区二区| 国产一区 二区| 国产aⅴ精品一区二区四区| 激情视频一区二区三区| 一区在线视频观看| 国产精品亚洲综合色区韩国| 精品一级视频| 另类激情亚洲| 国产乱子精品一区二区在线观看 | 日本一区中文字幕| 模特精品在线| 久久这里只有精品一区二区| 超碰成人av| 日韩有吗在线观看| 嫩呦国产一区二区三区av| 国产99久久久国产精品成人免费| 国产精品毛片| 九九九精品视频| 欧美jjzz| 精品亚洲免a| 欧美特黄一区| 久久精品国产精品亚洲毛片| 99精品国产一区二区三区| 亚洲不卡av不卡一区二区| 免费在线观看精品| 久久国产精品色av免费看| 免费视频国产一区| 97精品久久| 亚洲欧洲一区二区天堂久久| 日本午夜精品一区二区三区电影| 亚洲第一区色| 奇米亚洲欧美| 一区二区视频欧美| 国产精品九九| 黄色aa久久| 日韩精品久久久久久| 在线手机中文字幕| 日本麻豆一区二区三区视频| 四虎影视精品| 久久精品天堂| 亚洲一区二区三区免费在线观看 | 亚洲不卡av不卡一区二区| 中文字幕亚洲影视| 亚洲高清二区| 国产精品第一国产精品| 美女精品一区| 日韩在线高清| 日韩和欧美的一区| 国产一区清纯| 国产精品久av福利在线观看| 视频一区欧美精品| 韩国女主播一区二区三区| 91精品丝袜国产高跟在线| 999国产精品视频| аⅴ资源天堂资源库在线| 日韩美女精品| 美女久久一区| 久久精品青草| 高清av一区| 欧美啪啪一区| 日本国产一区| 国产精品社区| 99riav国产精品| 亚洲精品国产嫩草在线观看| 日韩av资源网| 日韩国产成人精品| 九九综合九九| 精品三级久久| 九九九精品视频| 国产精品v一区二区三区| 亚洲丝袜美腿一区| 免费看精品久久片| 性欧美69xoxoxoxo| 久久精品卡一| 高清不卡亚洲| 国产精品精品国产一区二区| 国产伦一区二区三区| 欧美一级全黄| 亚洲精品在线国产| 欧美日韩xxxx| 97久久亚洲| 日韩一区二区三区在线看| 老鸭窝亚洲一区二区三区| 亚洲三区欧美一区国产二区| 午夜一区在线| 91久久在线| 日韩一区精品字幕| 精品欧美一区二区三区在线观看| 国产传媒av在线| 国产精品亚洲二区| 激情久久99| 国产一区二区三区四区二区| 欧美激情另类| 精品视频免费| 日韩欧美视频专区| 日韩88av| av最新在线| 快播电影网址老女人久久| 精品一区三区| 欧美日韩国产综合网| 男人的天堂久久精品| 国产精品视区| 日韩在线视频一区二区三区| 香蕉久久一区| 日本麻豆一区二区三区视频| 91精品国产一区二区在线观看| 国产精品白丝一区二区三区| 久久国产麻豆精品| 国产麻豆精品| 久久丁香四色| 国产盗摄——sm在线视频| 久久精品国产久精国产| 国产精品香蕉| 一区二区精品伦理...| 中文在线а√在线8| 亚洲涩涩在线| 999久久久免费精品国产| 亚洲一区二区动漫| 视频一区欧美日韩| 国产极品一区| 国产精品久久久一区二区| 国产精品毛片久久| 麻豆9191精品国产| 日韩高清三区| 国产高清精品二区| 欧美不卡高清| 亚洲一区免费| 国产欧美日韩一区二区三区四区| 国产精品国码视频| 91精品国产调教在线观看| 午夜电影亚洲| 欧美自拍一区| 成人在线视频免费| 热久久国产精品| 国产精品亚洲欧美日韩一区在线| 久久三级视频| 丝袜美腿高跟呻吟高潮一区| 国产图片一区| 青青青免费在线视频| 在线观看亚洲精品福利片| 国产日韩欧美一区| 国产综合色区在线观看| 香蕉久久久久久久av网站| 激情综合婷婷| 国产精品88久久久久久| 久久精品99国产精品| 黄色在线网站噜噜噜| 亚洲视频二区| 国产一区二区三区久久久久久久久| 91久久黄色| 国产乱人伦精品一区| 99国产精品久久久久久久| 国产欧美日本|