电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

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

Python 的虛擬環(huán)境用來(lái)創(chuàng)建一個(gè)相對(duì)獨(dú)立的執(zhí)行環(huá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)境變量最開始,那么就會(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 介紹,包括常見參數(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)文章:
主站蜘蛛池模板: 淘趣英语网 - 在线英语学习,零基础英语学习网站 | 全自动包装机_灌装机生产厂家-迈驰包装设备有限公司 | 2-羟基泽兰内酯-乙酰蒲公英萜醇-甘草查尔酮A-上海纯优生物科技有限公司 | 莱州网络公司|莱州网站建设|莱州网站优化|莱州阿里巴巴-莱州唯佳网络科技有限公司 | 安徽免检低氮锅炉_合肥燃油锅炉_安徽蒸汽发生器_合肥燃气锅炉-合肥扬诺锅炉有限公司 | RTO换向阀_VOC高温阀门_加热炉切断阀_双偏心软密封蝶阀_煤气蝶阀_提升阀-湖北霍科德阀门有限公司 | 电子万能试验机_液压拉力试验机_冲击疲劳试验机_材料试验机厂家-济南众标仪器设备有限公司 | 世界箱包品牌十大排名,女包小众轻奢品牌推荐200元左右,男包十大奢侈品牌排行榜双肩,学生拉杆箱什么品牌好质量好 - Gouwu3.com | 派财经_聚焦数字经济内容服务平台 | 2025福建平潭岛旅游攻略|蓝眼泪,景点,住宿攻略-趣平潭网 | 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 光泽度计_测量显微镜_苏州压力仪_苏州扭力板手维修-苏州日升精密仪器有限公司 | 横河变送器-横河压力变送器-EJA变送器-EJA压力变送器-「泉蕴仪表」 | 阿尔法-MDR2000无转子硫化仪-STM566 SATRA拉力试验机-青岛阿尔法仪器有限公司 | 成都网站建设制作_高端网站设计公司「做网站送优化推广」 | 哈希余氯测定仪,分光光度计,ph在线监测仪,浊度测定仪,试剂-上海京灿精密机械有限公司 | 保温杯,儿童婴童奶瓶,运动水壶「广告礼品杯定制厂家」超朗保温杯壶 | 不锈钢电动球阀_气动高压闸阀_旋塞疏水调节阀_全立阀门-来自温州工业阀门巨头企业 | 光栅尺厂家_数显表维修-苏州泽升精密机械| 内六角扳手「厂家」-温州市威豪五金工具有限公司 | 磁力抛光机_磁力研磨机_磁力去毛刺机-冠古设备厂家|维修|租赁【官网】 | 油冷式_微型_TDY电动滚筒_外装_外置式电动滚筒厂家-淄博秉泓机械有限公司 | 全自动定氮仪-半自动凯氏定氮仪厂家-祎鸿仪器 | 喷播机厂家_二手喷播机租赁_水泥浆洒布机-河南青山绿水机电设备有限公司 | 圣才学习网-考研考证学习平台,提供万种考研考证电子书、题库、视频课程等考试资料 | 太原装修公司_山西整装家装设计_太原室内装潢软装_肖邦家居 | 爱德华真空泵油/罗茨泵维修,爱发科-比其尔产品供应东莞/杭州/上海等全国各地 | 小程序开发公司_APP开发多少钱_软件开发定制_微信小程序制作_客户销售管理软件-济南小溪畅流网络科技有限公司 | 浙江美尔凯特智能厨卫股份有限公司 | 小青瓦丨古建筑瓦丨青瓦厂家-宜兴市徽派古典建筑材料有限公司 | 盘装氧量分析仪-防爆壁挂氧化锆分析仪-安徽吉帆仪表有限公司 | 刮板输送机,粉尘加湿搅拌机,螺旋输送机,布袋除尘器 | 注塑_注塑加工_注塑模具_塑胶模具_注塑加工厂家_深圳环科 | 成都离婚律师|成都结婚律师|成都离婚财产分割律师|成都律师-成都离婚律师网 | 实木家具_实木家具定制_全屋定制_美式家具_圣蒂斯堡官网 | 123悬赏网_发布悬赏任务_广告任务平台 | 深圳公司注册-工商注册代理-注册公司流程和费用_护航财税 | 超声波气象站_防爆气象站_空气质量监测站_负氧离子检测仪-风途物联网 | 交联度测试仪-湿漏电流测试仪-双85恒温恒湿试验箱-常州市科迈实验仪器有限公司 | 磁力抛光研磨机_超声波清洗机厂家_去毛刺设备-中锐达数控 | 影像测量仪_三坐标测量机_一键式二次元_全自动影像测量仪-广东妙机精密科技股份有限公司 |