一行代碼實現(xiàn)Python動態(tài)加載依賴
前幾天在一個開源項目里遇到好多用戶反饋,不會安裝依賴,或者執(zhí)行 pip install -r requirements.txt
沒有反應(yīng)。
可能造成的原因有很多種,一一排查起來也很麻煩。
想一勞永逸解決這個問題,一般大家都是到 site-packages
里面把所需要的包導出來,放到項目根目錄。
但這樣終究太過粗糙,不符合Python優(yōu)雅的個性。
所以我就想,能不能動態(tài)引入包,如果沒有的話,再調(diào)用 pip 下載。最后也差不多實現(xiàn)了我的設(shè)想。
我大概查了一下,現(xiàn)在好像沒有人用過這個方案,我自己使用感覺還是很方便的,分享給大家。
雖然想打成library給大家下載的,后來想到這又要依賴pip,違背了做動態(tài)依賴的本意
所以我推薦是使用 快速開始 - 注入代碼運行 中的方式
快速開始
跪求star GitHub - louisyoungx/dypend
通過 pip 安裝運行
在 PyPI 下載 dypend依賴包
pip install dypend
在本地生成 requirements.txt 依賴文件
pip freeze > requirements.txt
在項目的入口文件的最上層引入 dypend ,不用更改任何其他代碼
import dypend
這時 dypend會檢查你的Python環(huán)境中是否都有 requirements.txt 中的包,如果沒有, dypend會調(diào)用 pip下載。
注入代碼運行
在本地生成 requirements.txt 依賴文件
pip freeze > requirements.txt
在項目的入口文件的最上層添加如下代碼,不用更改任何其他代碼
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()
這時dypend會檢查你的Python環(huán)境中是否都有 requirements.txt 中的包,如果沒有,dypend會自動下載。
到此這篇關(guān)于一行代碼實現(xiàn)Python動態(tài)加載依賴的文章就介紹到這了,更多相關(guān)Python動態(tài)加載依賴內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python GUI之tkinter窗口視窗教程大集合(推薦)
這篇文章主要介紹了Python GUI之tkinter窗口視窗教程大集合,看這一篇教程足了,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10Keras SGD 隨機梯度下降優(yōu)化器參數(shù)設(shè)置方式
這篇文章主要介紹了Keras SGD 隨機梯度下降優(yōu)化器參數(shù)設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06python數(shù)據(jù)分析之將爬取的數(shù)據(jù)保存為csv格式
Python內(nèi)置了CSV模塊,可直接通過該模塊實現(xiàn)csv文件的讀寫操作,在web應(yīng)用中導出數(shù)據(jù)是比較常見操作,下面這篇文章主要給大家介紹了關(guān)于python數(shù)據(jù)分析之將爬取的數(shù)據(jù)保存為csv格式的相關(guān)資料,需要的朋友可以參考下2022-06-06python輕松辦公將100個Excel中符合條件的數(shù)據(jù)匯總到1個Excel里
這篇文章主要為大家介紹了python輕松辦公將100個Excel中符合條件的數(shù)據(jù)匯總到1個Excel里示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03