为什么python不能看到我的模块?

时间:2018-03-19 21:19:17

标签: python import

我有这样的文件结构:

/package/main.py
/package/__init__.py
/package/config_files/config.py
/package/config_files/__init__.py

我正在尝试根据命令行参数从config.py动态导入main.py,如下所示:

#!/usr/bin/env python
from importlib import import_module

cmd_arguments = sys.argv
config_str = cmd_arguments[1]    
config = import_module(config_str, 'config_files')

但它抱怨ModuleNotFoundError: No module named 'default_config'。当从/package

调用时,ipython中的类似代码不会遇到同样的问题

如果有更好的方法在运行时通过用户输入加载包,我愿意接受建议。

1 个答案:

答案 0 :(得分:1)

您正尝试从嵌套包导入,因此请使用完整的包名称:

config = import_module(config_str, 'package.config_files')

或者,使用相对导入,并将第二个参数设置为package

config = import_module('.config_files.{}'.format(config_str), 'package')

这更安全,因为现在config_str字符串不能用于“突破”config_files子包。

您确实希望从用户提供的名称中删除点(并且最好将名称限制为仅有效的Python标识符。)