【问题标题】:Arbitrarily modify and import a python module after importing导入后任意修改导入一个python模块
【发布时间】:2019-10-26 17:06:11
【问题描述】:

首先,我使用 importlib 来修改导入并试图找到修改导入文件的解决方案。 我看到一个answer 建议任意修改导入的模块可以使用这段代码

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' 对象没有属性 'loader'

然后我尝试打印 'spec' 但没有得到所以,我认为 spec 正在返回,而名为 o.xran 的文件存在。

【问题讨论】:

    标签: python python-3.x import python-import


    【解决方案1】:

    好的,经过一天我终于让它工作了,因为我只处理本地文件,所以我根本不需要使用 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
    

    感谢任何回答或尝试贡献的人。

    【讨论】:

      【解决方案2】:

      兄弟,在您的文本编辑器中打开修改后的模块,在打开项目的同一窗口中,然后在您的项目中使用导入它,'from import *'..希望它会起作用..thanx

      【讨论】:

      • 不,我想在导入之前随意修改模块,只是编辑模块根本没有帮助
      猜你喜欢
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多