簡體   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