国产乱子伦高清露脸对白-国产精品欧美久久久久天天影视-国产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語(yǔ)句中導(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ⅴ在线观看-精品中文字幕在线

        eeuss中文| 15—17女人毛片| 国产免费视频传媒| 国产91沈先生在线播放| 国产三级三级三级看三级| 色婷婷成人在线| 国产精品wwwww| 欧美日韩福利在线| 麻豆md0077饥渴少妇| 国产精品少妇在线视频| 黄色一级片在线看| 女人色极品影院| www.成人黄色| 中文字幕色网站| 天堂社区在线视频| 久久久久久久久久久福利| www.国产在线播放| 性生活免费观看视频| 久国产精品视频| 在线观看免费黄网站| 国产极品尤物在线| 国产成人在线小视频| 日韩精品第1页| www.欧美黄色| 久艹在线免费观看| 国产在线播放观看| 浮妇高潮喷白浆视频| 欧美又粗又长又爽做受| 日本wwwcom| 青青草原av在线播放| 激情综合在线观看| 熟妇人妻va精品中文字幕| 日本三级免费观看| 中文字幕一区二区三区四区在线视频| 欧美激情视频免费看| 成人av在线播放观看| 777久久精品一区二区三区无码| 一二三在线视频| 欧洲精品一区二区三区久久| 玩弄中年熟妇正在播放| 中国丰满人妻videoshd| 日本男人操女人| 久久久久久综合网| 成人免费性视频| 在线观看av日韩| 女女百合国产免费网站| www精品久久| 在线视频日韩一区| 久久久久久久久影视| 国产视频一视频二| 成年人免费大片| 国产传媒免费观看| 成年人午夜免费视频| 美女黄色片视频| 亚洲成人动漫在线| 欧洲熟妇精品视频| 亚洲高潮无码久久| 91黄色小网站| 看一级黄色录像| 青青在线视频免费| www.69av| 亚洲成人福利在线| 高清欧美精品xxxxx| 国产永久免费网站| 黄色片视频在线免费观看| 亚洲av无日韩毛片久久| 日本wwww视频| 99国产精品白浆在线观看免费| 欧美日韩一区二区在线免费观看| 四虎永久免费网站| 五月婷婷激情久久| 人妻无码久久一区二区三区免费| 高清一区二区视频| aa在线免费观看| 男女激情免费视频| 色中文字幕在线观看| 亚洲一二三区av| 黄色一级视频在线播放| 91精品国产毛片武则天| 91日韩精品视频| 免费涩涩18网站入口| 国产视频一视频二| 国产3p露脸普通话对白| 日本a级片在线观看| 特黄特黄一级片| 色www免费视频| 青青在线视频免费| aaa毛片在线观看| 欧美精品99久久| 黄色网页免费在线观看| 国产美女网站在线观看| eeuss中文| 中文字幕色呦呦| 国内av免费观看| 日韩人妻精品一区二区三区| 午夜免费一级片| 思思久久精品视频| 欧美特级aaa| 九九久久久久久| 天天干天天色天天爽| 国产树林野战在线播放| mm131午夜| 欧美视频在线观看视频| 国产xxxx振车| 日韩欧美视频网站| 国产熟人av一二三区| 欧美日韩一区二区三区69堂| 九九九九九国产| 国产四区在线观看| 欧美美女黄色网| 97干在线视频| 欧美一级在线看| 亚洲xxxx2d动漫1| 久久婷婷中文字幕| 青青青免费在线| 国产日韩成人内射视频| 日本美女高潮视频| av电影一区二区三区| 无码人妻丰满熟妇区96| 亚洲综合婷婷久久| 中文字幕乱码免费| 免费日韩视频在线观看| 中文字幕日韩久久| 日韩在线综合网| 欧美男女交配视频| 激情五月六月婷婷| 狠狠躁狠狠躁视频专区| 青草全福视在线| 国产精品69页| 日本精品免费视频| 久久久久狠狠高潮亚洲精品| 性生生活大片免费看视频| www.av中文字幕| 在线观看免费污视频| 深夜做爰性大片蜜桃| 波多野结衣天堂| 欧美精品一区二区三区三州| 亚洲综合婷婷久久| 久久久久久久久久久久久国产精品 | 国产91沈先生在线播放| 中文字幕一区二区三区四区在线视频| 五月天国产视频| 超碰影院在线观看| 黄色一级视频片| 免费看av软件| 午夜国产福利在线观看| 免费毛片小视频| 日本高清视频免费在线观看| 成年人三级黄色片| 91热这里只有精品| 丝袜老师办公室里做好紧好爽 | 手机在线免费毛片| 一区二区三区 日韩| 茄子视频成人免费观看| 很污的网站在线观看| 欧美日韩午夜爽爽| 日韩不卡的av| 午夜免费视频网站| 在线视频观看91| 九九久久久久久| 色呦色呦色精品| 日韩欧美亚洲另类| 91小视频在线播放| 在线观看国产福利| 91女神在线观看| www.精品在线| 免费网站在线观看黄| а 天堂 在线| 天天操夜夜操很很操| 黄色小视频大全| av在线观看地址| 久久久亚洲国产精品| 国产精品久久中文字幕| 欧美丰满熟妇bbbbbb百度| 日韩av在线播放不卡| 大陆极品少妇内射aaaaa| 男女高潮又爽又黄又无遮挡| 国产美女三级视频| 在线看免费毛片| www.亚洲成人网| 少妇高潮毛片色欲ava片| 欧美一级在线看| 超碰在线公开97| 中文字幕一区二区三区四区五区人| 日韩高清在线一区二区| 四虎4hu永久免费入口| 两根大肉大捧一进一出好爽视频| 久色视频在线播放| 亚洲黄色av网址| 超碰免费在线公开| 男女猛烈激情xx00免费视频| 女人另类性混交zo| 国产精品99久久久久久大便| 香港三级日本三级a视频| 那种视频在线观看| 日韩精品一区二区三区电影| 中文字幕乱码人妻综合二区三区| 99九九99九九九99九他书对| 国产在线视频在线| 无限资源日本好片|