国产乱子伦高清露脸对白-国产精品欧美久久久久天天影视-国产91视频一区-亚洲欧美日产综合在线网-黄视频网站在线看-国产欧美亚洲精品第1页-亚洲www在线-大学生女人三级在线播放-日本在线视频www鲁啊鲁-国产成人精品一区二区仙踪林-69精品欧美一区二区三区-成人欧美亚洲-日本污污网站-中国妞xxxhd露脸偷拍视频-国产精品aⅴ在线观看-精品中文字幕在线

極客小將

您現(xiàn)在的位置是:首頁(yè) » python編程資訊

資訊內(nèi)容

學(xué)習(xí)在python中實(shí)現(xiàn)自動(dòng)導(dǎo)入缺失的庫(kù)

極客小將2021-01-04-
簡(jiǎn)介python教程欄目介紹實(shí)現(xiàn)自動(dòng)導(dǎo)入缺失的庫(kù)。導(dǎo)入失敗問題,通常分為兩種:一種是導(dǎo)入自己寫的模塊(即以.py為后綴的文件),另一種是導(dǎo)入三方庫(kù)。本文主要討論第二種情況,今后有機(jī)會(huì),我們?cè)僭敿?xì)討論其它的相關(guān)話題。解決導(dǎo)入Python庫(kù)失敗的問題,其實(shí)關(guān)鍵是在運(yùn)行環(huán)境中裝上缺失的庫(kù)(注意是否是虛擬環(huán)境)
歡迎訪問少兒編程網(wǎng)(http://www.pxcodes.com) python教程欄目介紹實(shí)現(xiàn)自動(dòng)導(dǎo)入缺失的庫(kù)。

ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

導(dǎo)入失敗問題,通常分為兩種:一種是導(dǎo)入自己寫的模塊(即以 .py 為后綴的文件),另一種是導(dǎo)入三方庫(kù)。本文主要討論第二種情況,今后有機(jī)會(huì),我們?cè)僭敿?xì)討論其它的相關(guān)話題。ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

解決導(dǎo)入 Python庫(kù)失敗的問題,其實(shí)關(guān)鍵是在運(yùn)行環(huán)境中裝上缺失的庫(kù)(注意是否是虛擬環(huán)境),或者使用恰當(dāng)?shù)奶娲桨浮_@個(gè)問題又分為三種情況:ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

一、單個(gè)模塊中缺失的庫(kù)

在編寫代碼的時(shí)候,如果我們需要使用某個(gè)三方庫(kù)(如 requests),但不確定實(shí)際運(yùn)行的環(huán)境是否裝了它,那么可以這樣:ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

try: import requestsexcept ImportError: import os os.system('pip install requests') import requests復(fù)制代碼

這樣寫的效果是,如果找不到 requests 庫(kù),就先安裝,再導(dǎo)入。ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

在某些開源項(xiàng)目中,我們可能還會(huì)看到如下的寫法(以 json 為例):ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

ry: import simplejson as jsonexcept ImportError: import json復(fù)制代碼

這樣寫的效果是,優(yōu)先導(dǎo)入三方庫(kù)simplejson,如果找不到,那就使用內(nèi)置的標(biāo)準(zhǔn)庫(kù) json。ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

這種寫法的好處是不需要導(dǎo)入額外的庫(kù),但它有個(gè)缺點(diǎn),即需要保證那兩個(gè)庫(kù)在使用上是兼容的,如果在標(biāo)準(zhǔn)庫(kù)中找不到替代的庫(kù),那就不可行了。ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

如果真找不到兼容的標(biāo)準(zhǔn)庫(kù),也可以自己寫一個(gè)模塊(如 my_json.py),實(shí)現(xiàn)想要的東西,然后在except語句中導(dǎo)入它。ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

ry: import simplejson as jsonexcept ImportError: import my_json as json復(fù)制代碼

碼字不易廢話兩句:有需要學(xué)習(xí)資料的或者有技術(shù)問題交流“點(diǎn)擊”即可ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

二、整個(gè)項(xiàng)目中缺失的庫(kù)

以上的思路是針對(duì)開發(fā)中的項(xiàng)目,但是它有幾個(gè)不足:ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

1、在代碼中對(duì)每個(gè)可能缺失的三方庫(kù)都 pip install,并不可取;ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

2、某個(gè)三方庫(kù)無法被標(biāo)準(zhǔn)庫(kù)或自己手寫的庫(kù)替代,該怎么辦?ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

3、已成型的項(xiàng)目,不允許做這些修改怎么辦?ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

所以這里的問題是:有一個(gè)項(xiàng)目,想要部署到新的機(jī)器上,它涉及很多三方庫(kù),但是機(jī)器上都沒有預(yù)裝,該怎么辦?ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

對(duì)于一個(gè)合規(guī)的項(xiàng)目,按照約定,通常它會(huì)包含一個(gè)“requirements.txt ”文件,記錄了該項(xiàng)目的所有依賴庫(kù)及其所需的版本號(hào)。這是在項(xiàng)目發(fā)布前,使用命令pip freeze > requirements.txt 生成的。ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

使用命令pip install -r requirements.txt (在該文件所在目錄執(zhí)行,或在命令中寫全文件的路徑),就能自動(dòng)把所有的依賴庫(kù)給裝上。ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

但是,如果項(xiàng)目不合規(guī),或者由于其它倒霉的原因,我們沒有這樣的文件,又該如何是好?ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

一個(gè)笨方法就是,把項(xiàng)目跑起來,等它出錯(cuò),遇到一個(gè)導(dǎo)庫(kù)失敗,就手動(dòng)裝一個(gè),然后再跑一遍項(xiàng)目,遇到導(dǎo)庫(kù)失敗就裝一下,如此循環(huán)……ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

三、自動(dòng)導(dǎo)入任意缺失的庫(kù)

有沒有一種更好的可以自動(dòng)導(dǎo)入缺失的庫(kù)的方法呢?ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

在不修改原有的代碼的情況下,在不需要“requirements.txt”文件的情況下,有沒有辦法自動(dòng)導(dǎo)入所需要的庫(kù)呢?ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

當(dāng)然有!先看看效果:ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

我們以tornado 為例,第一步操作可看出,我們沒有裝過 tornado,經(jīng)過第二步操作后,再次導(dǎo)入 tornado 時(shí),程序會(huì)幫我們自動(dòng)下載并安裝好 tornado,所以不再報(bào)錯(cuò)。ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

autoinstall 是我們手寫的模塊,代碼如下:ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

# 以下代碼在 python 3.6.1 版本驗(yàn)證通過import sysimport osfrom importlib import import_moduleclass AutoInstall(): _loaded = set() @classmethod def find_spec(cls, name, path, target=None): if path is None and name not in cls._loaded: cls._loaded.add(name) print("Installing", name) try: result = os.system('pip install {}'.format(name)) if result == 0: return import_module(name) except Exception as e: print("Failed", e) return Nonesys.meta_path.append(AutoInstall)復(fù)制代碼

這段代碼中使用了sys.meta_path ,我們先打印一下,看看它是個(gè)什么東西?ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

Python 3的 import 機(jī)制在查找過程中,大致順序如下:ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

在 sys.modules 中查找,它緩存了所有已導(dǎo)入的模塊ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

在 sys.meta_path中查找,它支持自定義的加載器ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

在 sys.path 中查找,它記錄了一些庫(kù)所在的目錄名ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

若未找到,拋出ImportError異常ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

其中要注意,sys.meta_path 在不同的Python版本中有所差異,比如它在Python 2 與 Python 3 中差異很大;在較新的 Python 3 版本(3.4+)中,自定義的加載器需要實(shí)現(xiàn)find_spec方法,而早期的版本用的則是find_module。ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

以上代碼是一個(gè)自定義的類庫(kù)加載器 AutoInstall,可以實(shí)現(xiàn)自動(dòng)導(dǎo)入三方庫(kù)的目的。需要說明一下,這種方法會(huì)“劫持”所有新導(dǎo)入的庫(kù),破壞原有的導(dǎo)入方式,因此也可能出現(xiàn)一些奇奇怪怪的問題,敬請(qǐng)留意。ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

sys.meta_path 屬于 Python 探針的一種運(yùn)用。探針,即import hook,是 Python 幾乎不受人關(guān)注的機(jī)制,但它可以做很多事,例如加載網(wǎng)絡(luò)上的庫(kù)、在導(dǎo)入模塊時(shí)對(duì)模塊進(jìn)行修改、自動(dòng)安裝缺失庫(kù)、上傳審計(jì)信息、延遲加載等等。ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

限于篇幅,我們不再詳細(xì)展開了。**后小結(jié)一下:ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

可以用 try…except 方式,實(shí)現(xiàn)簡(jiǎn)單的三方庫(kù)導(dǎo)入或者替換ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

已知全部缺失的依賴庫(kù)時(shí)(如 requirements.txt),可以手動(dòng)安裝ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

利用 sys.meta_path,可以自動(dòng)導(dǎo)入任意的缺失庫(kù)ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

相關(guān)免費(fèi)學(xué)習(xí)推薦:python教程(視頻)ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

以上就是學(xué)習(xí)在python中實(shí)現(xiàn)自動(dòng)導(dǎo)入缺失的庫(kù)的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注少兒編程網(wǎng)其它相關(guān)文章!ekR少兒編程網(wǎng)-Scratch_Python_教程_免費(fèi)兒童編程學(xué)習(xí)平臺(tái)

預(yù)約試聽課

已有385人預(yù)約都是免費(fèi)的,你也試試吧...

国产乱子伦高清露脸对白-国产精品欧美久久久久天天影视-国产91视频一区-亚洲欧美日产综合在线网-黄视频网站在线看-国产欧美亚洲精品第1页-亚洲www在线-大学生女人三级在线播放-日本在线视频www鲁啊鲁-国产成人精品一区二区仙踪林-69精品欧美一区二区三区-成人欧美亚洲-日本污污网站-中国妞xxxhd露脸偷拍视频-国产精品aⅴ在线观看-精品中文字幕在线

        亚洲欧美久久久久| 久久这里只有精品18| 亚洲欧美视频二区| 五月天婷婷影视| 免费成人进口网站| 黄色成人在线看| 国产成人综合一区| 日本特级黄色大片| 欧美日韩精品在线一区二区 | 国产精品333| 国产三级三级看三级| 香蕉视频免费版| 苍井空浴缸大战猛男120分钟| 国产无遮挡猛进猛出免费软件| 亚洲精品国产suv一区88| 国产成人久久婷婷精品流白浆| 老司机久久精品| 91.com在线| 日韩精品视频一二三| 免费看欧美一级片| 毛片在线视频播放| 91淫黄看大片| www.成人黄色| 欧美大黑帍在线播放| 国产高清www| 成熟老妇女视频| 亚洲小视频网站| www婷婷av久久久影片| 国产在线青青草| 香港日本韩国三级网站| 无颜之月在线看| 久草在在线视频| 日本福利视频导航| 北条麻妃亚洲一区| 18禁裸男晨勃露j毛免费观看| 毛片在线视频播放| 浓精h攵女乱爱av| 鲁一鲁一鲁一鲁一澡| 天天色综合社区| 欧美午夜小视频| 国产福利影院在线观看| 成人国产在线看| 亚洲另类第一页| 丁香六月激情网| 中文字幕国产高清| heyzo亚洲| 性做爰过程免费播放| 无码无遮挡又大又爽又黄的视频| 午夜视频在线网站| 国产日韩一区二区在线| 亚洲第一综合网站| 国产嫩草在线观看| 日本日本19xxxⅹhd乱影响| 天堂av手机在线| 激情视频免费网站| 日本久久久精品视频| 久久久久久久久久伊人| 97人人模人人爽人人澡| 99在线精品免费视频| 久久6免费视频| 久久久久免费精品| 热久久精品免费视频| 毛片在线视频播放| 免费网站在线观看视频| 久久久久xxxx| 久久国产这里只有精品| 免费激情视频在线观看| 亚洲自偷自拍熟女另类| 欧美美女黄色网| 好色先生视频污| 在线观看日本www| 日韩欧美国产片| 无码人妻精品一区二区三区66| 日韩一级性生活片| 国产高清www| 国产极品在线视频| 免费av手机在线观看| 奇米精品一区二区三区| 欧美 日韩 激情| 国产一区二区在线视频播放| 欧美这里只有精品| 成人污网站在线观看| 日本a级片在线播放| 六月婷婷激情综合| 国产人妻人伦精品| 无颜之月在线看| 熟女人妇 成熟妇女系列视频| 超碰网在线观看| 伊人影院综合在线| 最新av在线免费观看| 麻豆映画在线观看| 99久久免费观看| 免费在线观看亚洲视频 | 亚洲熟妇av一区二区三区| 成人午夜精品久久久久久久蜜臀| 波多野结衣乳巨码无在线| 妞干网在线视频观看| 青青在线视频免费| 国产精欧美一区二区三区白种人| 深夜做爰性大片蜜桃| 91嫩草国产丨精品入口麻豆| 欧美交换配乱吟粗大25p| 日韩欧美一区二| 成人亚洲精品777777大片| 成人高清在线观看视频| 成人在线播放网址| 99re在线视频免费观看| 欧美激情第一区| 成品人视频ww入口| 日韩毛片在线免费看| 日本人69视频| 大伊香蕉精品视频在线| 亚洲欧美另类动漫| 在线观看污视频| 国产男女无遮挡| 亚洲小说欧美另类激情| 亚洲人成无码www久久久| 黄色一级片网址| 免费看黄在线看| 国产嫩草在线观看| 337p粉嫩大胆噜噜噜鲁| 激情图片qvod| 无码人妻丰满熟妇区毛片| 日韩亚洲欧美一区二区| 国产超碰在线播放| 91网站在线观看免费| 免费看涩涩视频| 日韩视频免费播放| 做爰高潮hd色即是空| 日韩福利视频在线| 岛国大片在线播放| 日本三级福利片| 免费裸体美女网站| 成人午夜精品久久久久久久蜜臀| 亚洲色图欧美自拍| 99视频在线视频| 国产精品后入内射日本在线观看| 污片在线免费看| 色七七在线观看| 午夜肉伦伦影院| 久久久久久www| 国产在线观看欧美| 咪咪色在线视频| a在线观看免费视频| 天天综合网久久| 91av视频免费观看| 日本精品www| 九九九九免费视频| 黄色国产一级视频| 福利在线一区二区| 国产美女永久无遮挡| 午夜激情视频网| www激情五月| 亚洲国产欧美91| 日日噜噜噜夜夜爽爽| 伊人精品视频在线观看| 做爰高潮hd色即是空| 福利在线小视频| 国产性生活一级片| 成人免费网站入口| 国产精品国产亚洲精品看不卡| av在线播放天堂| 精品久久久久久久久久中文字幕 | 亚洲国产精品成人天堂| 蜜桃视频一区二区在线观看| 老汉色影院首页| 激情五月婷婷六月| 久色视频在线播放| www国产黄色| 在线免费av播放| 天天久久综合网| 日韩国产小视频| 香港三级韩国三级日本三级| 欧美午夜性生活| 日韩欧美亚洲另类| 国产精品啪啪啪视频| 国产日产欧美一区二区| 蜜臀一区二区三区精品免费视频| av中文字幕av| 国产精品久久中文字幕| 午夜激情在线观看视频| 91精产国品一二三产区别沈先生| 欧美另类videos| 大肉大捧一进一出好爽动态图| 中文字幕免费高清在线| 一区二区三区四区免费观看| 欧美性久久久久| 亚洲天堂网2018| 免费无码不卡视频在线观看| av网站在线不卡| 欧美亚洲视频一区| 欧美又黄又嫩大片a级| 欧美视频第一区| 波多野结衣免费观看| 成年人午夜视频在线观看| 伊人色在线观看| 日韩a级在线观看| 蜜桃福利午夜精品一区| 九色自拍视频在线观看| 中文字幕第一页在线视频|