溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用代碼實現Python動態加載依賴

發布時間:2021-12-27 17:10:01 來源:億速云 閱讀:238 作者:柒染 欄目:開發技術

今天就跟大家聊聊有關如何用代碼實現Python動態加載依賴,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

前幾天在一個開源項目里遇到好多用戶反饋,不會安裝依賴,或者執行 pip install -r requirements.txt 沒有反應。

可能造成的原因有很多種,一一排查起來也很麻煩。

想一勞永逸解決這個問題,一般大家都是到 site-packages 里面把所需要的包導出來,放到項目根目錄。

但這樣終究太過粗糙,不符合Python優雅的個性。

所以我就想,能不能動態引入包,如果沒有的話,再調用 pip 下載。最后也差不多實現了我的設想。

我推薦是使用 快速開始 - 注入代碼運行 中的方式

快速開始

跪求star GitHub - louisyoungx/dypend

通過 pip 安裝運行

在 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動態加載依賴有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女