使用全局变量从文件路径加载模块
Loading module from file path with global variables
我希望用户能够使用一些值作为全局变量来编写自己的简约脚本文件。
基本上,我想要这样的东西:
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})'
main.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'))
提前感谢任何help/suggestions。
编辑:更改要求以确保栏在加载时是全局的
好的,我找到了答案。这有点奇怪,但是你必须在加载和执行 foo
之间将 bar 设置为一个值
main.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'))
我希望用户能够使用一些值作为全局变量来编写自己的简约脚本文件。
基本上,我想要这样的东西:
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})'
main.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'))
提前感谢任何help/suggestions。
编辑:更改要求以确保栏在加载时是全局的
好的,我找到了答案。这有点奇怪,但是你必须在加载和执行 foo
之间将 bar 设置为一个值main.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'))