[英]why can't python see my module?
我有一個像這樣的文件結構:
/package/main.py
/package/__init__.py
/package/config_files/config.py
/package/config_files/__init__.py
我正在嘗試根據命令行參數從main.py
動態導入config.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'
中斷ModuleNotFoundError: No module named 'default_config'
。 從/package
調用時,ipython中的類似代碼不會遇到相同的問題
如果有更好的方法可以在運行時通過用戶輸入來加載程序包,我歡迎您提出建議。
您正在嘗試從嵌套軟件包中導入,因此請使用完整的軟件包名稱:
config = import_module(config_str, 'package.config_files')
或者,使用相對導入,然后將第二個參數設置為package
:
config = import_module('.config_files.{}'.format(config_str), 'package')
這更加安全,因為現在config_str
字符串不能用於“突破” config_files
子軟件包。
您確實想從用戶提供的名稱中刪除點(最好將名稱限制為僅有效的Python標識符)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.