【问题标题】:Loading module from file path with global variables使用全局变量从文件路径加载模块
【发布时间】:2018-04-22 07:28:53
【问题描述】:

我希望用户能够使用一些值作为全局变量来编写自己的简约脚本文件。

基本上,我想要这样的东西:
bar.py(与 main.py 相同的目录)

def bar(x):
    return f'bar({x})'

foo.py(可能远离 main.py)

b = bar('hi') #I want bar to be a global variable in this file
def foo(x):
    return f'{x}: foo({b})'

ma​​in.py(我用过Sebastian's answer on how to import modules

import importlib.util
from bar import bar

spec = importlib.util.spec_from_file_location("", r"/path/to/foo.py") #side question: does the name parameter have any effect on the code?
fooModule = importlib.util.module_from_spec(spec)
spec.loader.exec_module(fooModule) #<---somehow bring bar into foo's globals

print(fooModule.foo('kevin'))

提前感谢任何帮助/建议。

编辑:更改了要求以确保 bar 在加载时是全局的

【问题讨论】:

    标签: python python-import python-3.6


    【解决方案1】:

    好的,我找到了答案。这有点奇怪,但您必须将 bar 设置为 在加载和执行 foo 之间的值

    ma​​in.py

    import importlib.util
    from bar import bar
    
    spec = importlib.util.spec_from_file_location("", r"/path/to/foo.py")
    fooModule = importlib.util.module_from_spec(spec)
    fooModule.bar = bar #<----
    spec.loader.exec_module(fooModule)
    
    print(fooModule.foo('kevin'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      • 2019-07-25
      • 1970-01-01
      • 2016-02-10
      • 2015-03-07
      • 2023-03-04
      • 2013-06-30
      相关资源
      最近更新 更多