python __import__文件夹中的所有文件都不起作用

时间:2012-04-17 10:46:44

标签: python import module directory

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

3 个答案:

答案 0 :(得分:2)

您的代码中存在两个问题:

  • __import__未导入全局命名空间,返回模块
  • 您正试图在test_samp
  • 时导入scripts.test_samp

你真正想要的是:

scripts = __import__("scripts", fromlist=modo)
scripts.test_samp.function("test") 

以上__import__返回包含所有子模块的scripts包。不要忘记通过在其中创建scripts来使__init__.py目录成为一个包。

另请参阅:Why does Python's __import__ require fromlist?

答案 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")