簡體   English   中英

導入后任意修改導入一個python模塊

[英]Arbitrarily modify and import a python module after importing

首先,我使用 importlib 來修改導入並試圖找到修改導入文件的解決方案。 我看到一個答案,建議您可以使用此代碼任意修改導入的模塊

def modify_and_import(module_name, package):
    spec = importlib.util.find_spec(module_name, package)
    source = spec.loader.get_source(module_name)
    new_source = tokens.tokenize(source)
    module = importlib.util.module_from_spec(spec)
    codeobj = compile(new_source, module.__spec__.origin, 'exec')
    exec(codeobj, module.__dict__)
    sys.modules[module_name] = module
    return module

現在我通過以下調用運行它

o = modify_and_import('o', "./o.xran")

但是,通過 exec 運行它會給我以下錯誤

AttributeError: 'NoneType' object 沒有屬性 'loader'

然后我嘗試打印 'spec' 但沒有得到,所以我認為 spec 正在返回,而名為 o.xran 的文件存在。

好的,一天后我終於讓它工作了,因為我只處理本地文件,我根本不需要使用 imp 。 這是我的最終代碼

with open(module_name) as f:
  source = f.read()
source = tokens.tokenize(source)
module = types.ModuleType(module_name)
exec(source, module.__dict__)
sys.modules[module_name] = module
return module

感謝任何回答或嘗試貢獻的人。

兄弟,在你的文本編輯器中打開修改后的模塊,在你的項目打開的同一個 window 中,然后在你的項目中使用,'from import *'..希望它會工作..thanx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM