[英]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.