您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關如何用代碼實現Python動態加載依賴,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
前幾天在一個開源項目里遇到好多用戶反饋,不會安裝依賴,或者執行 pip install -r requirements.txt
沒有反應。
可能造成的原因有很多種,一一排查起來也很麻煩。
想一勞永逸解決這個問題,一般大家都是到 site-packages
里面把所需要的包導出來,放到項目根目錄。
但這樣終究太過粗糙,不符合Python優雅的個性。
所以我就想,能不能動態引入包,如果沒有的話,再調用 pip 下載。最后也差不多實現了我的設想。
我推薦是使用 快速開始 - 注入代碼運行 中的方式
跪求star GitHub - louisyoungx/dypend
在 PyPI 下載 dypend依賴包
pip install dypend
在本地生成 requirements.txt 依賴文件
pip freeze > requirements.txt
在項目的入口文件的最上層引入 dypend ,不用更改任何其他代碼
import dypend
這時 dypend會檢查你的Python環境中是否都有 requirements.txt 中的包,如果沒有, dypend會調用 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環境中是否都有 requirements.txt 中的包,如果沒有,dypend會自動下載。
看完上述內容,你們對如何用代碼實現Python動態加載依賴有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。