from os import listdir
modo= [name.split(".py")[0] for name in listdir("scripts") if name.endswith(".py")]
modules = {}
for modu in modo:
modules[modu] = __import__(modu)
test_samp.function("test")
您好! 如果脚本目录中存在“test_samp.py”,为什么会这样 这不允许我运行test_samp.function(“test”)? 它返回:
Unhandled exception in thread started by <function function at 0x8e39204>
Traceback (most recent call last):
File "test_this.py", line 6, in function
test_samp.function("test")
NameError: global name 'test_samp' is not defined
答案 0 :(得分:2)
您的代码中存在两个问题:
__import__
未导入全局命名空间,返回模块test_samp
scripts.test_samp
你真正想要的是:
scripts = __import__("scripts", fromlist=modo)
scripts.test_samp.function("test")
以上__import__
返回包含所有子模块的scripts
包。不要忘记通过在其中创建scripts
来使__init__.py
目录成为一个包。
答案 1 :(得分:1)
您没有定义test_samp
您要定义modules['test_samp']
。另外,如果它在脚本中,则需要导入scripts.test_samp
在你的情况下使用package.Add一个空(或不)__init__.py
(带有2个下划线)。并使用import scripts
。使用scripts.test_samp.function("test")
访问您的功能。您可以使用reload(scripts)
重新加载所有包。
答案 2 :(得分:1)
您可以使用以下方式运行它:
modules["test_samp"].function("test")