繁体   English   中英

从python中的命名空间导入模块

[英]importing modules from namespaces in python

我的脚本与我运行的脚本位于同一路径。

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'

您能告诉我在这种情况下如何正确使用名称空间吗? 似乎已超过__import__行,但未导入正确的内容。

如何即时从命名空间中的模块导入?

在研究过程中,我发现:

如何正确使用python的import函数__import __()

建议我尝试:

module = importlib.import_module('root_dir.modules_dir.' + name_value)

起作用了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM