一行代碼實(shí)現(xiàn)Python動(dòng)態(tài)加載依賴
前幾天在一個(gè)開源項(xiàng)目里遇到好多用戶反饋,不會(huì)安裝依賴,或者執(zhí)行 pip install -r requirements.txt
沒(méi)有反應(yīng)。
可能造成的原因有很多種,一一排查起來(lái)也很麻煩。
想一勞永逸解決這個(gè)問(wèn)題,一般大家都是到 site-packages
里面把所需要的包導(dǎo)出來(lái),放到項(xiàng)目根目錄。
但這樣終究太過(guò)粗糙,不符合Python優(yōu)雅的個(gè)性。
所以我就想,能不能動(dòng)態(tài)引入包,如果沒(méi)有的話,再調(diào)用 pip 下載。最后也差不多實(shí)現(xiàn)了我的設(shè)想。
我大概查了一下,現(xiàn)在好像沒(méi)有人用過(guò)這個(gè)方案,我自己使用感覺(jué)還是很方便的,分享給大家。
雖然想打成library給大家下載的,后來(lái)想到這又要依賴pip,違背了做動(dòng)態(tài)依賴的本意
所以我推薦是使用 快速開始 - 注入代碼運(yùn)行 中的方式
快速開始
跪求star GitHub - louisyoungx/dypend
通過(guò) pip 安裝運(yùn)行
在 PyPI 下載 dypend依賴包
pip install dypend
在本地生成 requirements.txt 依賴文件
pip freeze > requirements.txt
在項(xiàng)目的入口文件的最上層引入 dypend ,不用更改任何其他代碼
import dypend
這時(shí) dypend會(huì)檢查你的Python環(huán)境中是否都有 requirements.txt 中的包,如果沒(méi)有, dypend會(huì)調(diào)用 pip下載。
注入代碼運(yùn)行
在本地生成 requirements.txt 依賴文件
pip freeze > requirements.txt
在項(xiàng)目的入口文件的最上層添加如下代碼,不用更改任何其他代碼
import os import re REQUIREMENTS = os.getcwd() + '/requirements.txt' def getDepends(): requirements = open(REQUIREMENTS, 'r') libs = requirements.readlines() libList = [] for lib in libs: try: name = re.search("^.+(?===)", lib).group(0) version = re.search("(?<===).+$", lib).group(0) libDict = { "name": name, "version": version } libList.append(libDict) except: continue return libList def importLib(): """Load python dependent libraries dynamically""" ? libList = getDepends() ? from pip._internal import main as pip_main import importlib ? def install(package): pip_main(['install', package]) ? createVar = locals() ? for lib in libList: print(lib) try: createVar[lib["name"]] = importlib.import_module(lib["name"]) except Exception as e: try: install(f'{lib["name"]}=={lib["version"]}') createVar[lib["name"]] = importlib.import_module(lib["name"]) except Exception as e: print(e) importLib()
這時(shí)dypend會(huì)檢查你的Python環(huán)境中是否都有 requirements.txt 中的包,如果沒(méi)有,dypend會(huì)自動(dòng)下載。
到此這篇關(guān)于一行代碼實(shí)現(xiàn)Python動(dòng)態(tài)加載依賴的文章就介紹到這了,更多相關(guān)Python動(dòng)態(tài)加載依賴內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python GUI之tkinter窗口視窗教程大集合(推薦)
這篇文章主要介紹了Python GUI之tkinter窗口視窗教程大集合,看這一篇教程足了,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10Keras SGD 隨機(jī)梯度下降優(yōu)化器參數(shù)設(shè)置方式
這篇文章主要介紹了Keras SGD 隨機(jī)梯度下降優(yōu)化器參數(shù)設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06django實(shí)現(xiàn)悲觀鎖樂(lè)觀鎖的項(xiàng)目實(shí)踐
在Django中,我們可以通過(guò)實(shí)現(xiàn)悲觀鎖和樂(lè)觀鎖來(lái)保證數(shù)據(jù)的安全性,本文就來(lái)介紹一下django實(shí)現(xiàn)悲觀鎖樂(lè)觀鎖的項(xiàng)目實(shí)踐,感興趣的可以了解一下2023-08-08python數(shù)據(jù)分析之將爬取的數(shù)據(jù)保存為csv格式
Python內(nèi)置了CSV模塊,可直接通過(guò)該模塊實(shí)現(xiàn)csv文件的讀寫操作,在web應(yīng)用中導(dǎo)出數(shù)據(jù)是比較常見操作,下面這篇文章主要給大家介紹了關(guān)于python數(shù)據(jù)分析之將爬取的數(shù)據(jù)保存為csv格式的相關(guān)資料,需要的朋友可以參考下2022-06-06python輕松辦公將100個(gè)Excel中符合條件的數(shù)據(jù)匯總到1個(gè)Excel里
這篇文章主要為大家介紹了python輕松辦公將100個(gè)Excel中符合條件的數(shù)據(jù)匯總到1個(gè)Excel里示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03