0

我正在尝试访问文件中的某些函数,该文件是我要使用它们的文件下方的一个目录。我希望以动态方式执行此操作,因为在运行之前我不会知道用户想要使用哪些功能。

例如,我会询问用户特定场景,如果他们请求 1424 场景,我希望能够访问“scenarios/scenario1424.py”文件中的函数。

我希望使用 importlib.import_module(...) 来执行此操作,但我似乎无法让它让我访问这些功能,即使我似乎成功地导入了文件模块。

目录结构:

code/
  - main.py
  scenarios/
    - __init__.py (empty)
    - scenario1420.py
    - scenario1421.py
    - scenario1424.py

在场景文件中,我将定义一堆方法,如下所示:

def run():
  .......

def compute():
  .......

我似乎能够使用importlib.import_module('scenarios.scenario1424')(returns <module 'scenarios.scenario1424' from 'scenarios/scenario1424.pyc'>) 导入模块,但是当我尝试访问类似: 的函数时scenario1424.run(),我得到一个 NameError ( NameError: name 'scenario1424' is not defined)。

有什么想法吗?

4

2 回答 2

2

import_module返回模块对象本身,将其分配给您可以使用的名称是您自己的责任。所以在你的情况下

scenario1424 = importlib.import_module('scenarios.scenario1424')

于 2012-10-10T22:06:13.840 回答
0

您的子目录是否包含__init__.py文件?

Python 使用__init__.py来确定一个目录是否是一个模块。

于 2012-10-10T22:10:24.643 回答