我的一些脚本与正在运行的脚本位于同一路径。
fatalError()
我有一些代码可以在需要时即时导入这些模块,它的工作就像一个魅力:
my_dir/
├── my_script.py
├── module_script_1.py
└── module_script_2.py
但是,随着系统变得越来越大,我正在尝试将其重构为更好的设计。
我正在尝试使用名称空间,所以现在是我的文件夹结构:
print('Starting python module ' + name_value)
module = __import__(name_value)
df = getattr(module, name_value)(arg1 = val1)
print('Finished python module ' + name_value, df)
现在,在root_dir/
├── modules_dir/
| ├── __init__.py
│ ├── module_script_1.py
│ └── module_script_2.py
├── workflow_dir/
│ └── my_script.py
└── setup.py
中,我们有一个名为setup.py
的命名空间:
root_dir
这就是我的设置,但是我似乎无法像以前那样轻松地复制之前导入模块的功能。让我告诉你我现在在setup(
name='root_dir',
namespace_packages=['root_dir'],
packages=[f'root_dir.{p}' for p in find_packages(where='root_dir')],
...
中拥有什么:
my_script.py
出现错误:
import root_dir.modules_dir # not necessary - just testing if import works
...
print('Attempting to import python module ' + name_value)
module = __import__('root_dir.modules_dir.' + name_value)
df = getattr(module, name_value)...
您能告诉我在这种情况下如何正确使用名称空间吗?它似乎已经超过了 df = getattr(module, name_value)...
AttributeError: module 'root_dir' has no attribute 'module_script_1'
行,但是没有导入正确的内容。
如何即时从命名空间中的模块导入?
答案 0 :(得分:0)
在研究过程中,我发现:
How to use python's import function properly __import__()
建议我尝试
module = importlib.import_module('root_dir.modules_dir.' + name_value)
有效。