[英]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.