【发布时间】:2019-08-23 10:55:39
【问题描述】:
TL,DR
我已经:
mod = import_module('path.module')
在那之后,我想要/需要做什么:
from mod.script import func
但这给了我:
ModuleNotFoundError: No module named 'mod.script'
警告:使用“mod.script.func()”或类似的方式调用它不能满足我的需要(项目约束),我搜索如何使用类似“from”的语法[module_imported_from_importlib] 导入 XXX"
简介:
我需要将现有代码拆分到具有多个版本的不同文件夹中。目标是在应用程序中有不同的部分,每个部分使用另一个部分的指定版本。
示例树:
ref.py
block1
__init__.py
- v1
| __init__.py
|- __init__.py
|- script1.py
block2
__init__.py
- v1
| __init__.py
|-- __init__.py
|-- script2.py
- v2
|- __init__.py
|-- __init__.py
|-- script2.py
有了这个,我需要运行: /block1/v1/script1.py 中的 /block2/v1/script2.py 函数
目标
我尝试做的是使用相同的语法指定 script1 应该在哪里使用“script2”(在 v1 或 block2 中的 v2),但只指定没有版本的块(会改变):
旧 script1.py :
from script2 import <func>
新脚本1.py
from block2.script2 import <func>
代码
我尝试了很多事情都没有成功,现在我在这里似乎接近解决方案但我找不到它(也许不可能?):
在 block1/v1/init.py 中:
from importlib import import_module, reload
MODULE = import_module('block2.v1') # With 'block2.v1' defined as a variable somewhere else (eg in ref.py)
reload(MODULE)
在 block1/v1/script1.py 中:
from block1.v1 import MODULE as block2
print(block2)
print(f'block2 : {dir(block2)}')
from block2.script2 import test
在 block2/v1/init.py 中:
from block2.v1 import script2
print(script2)
在 block2/v1/script2.py 中:
def test():
print("hello")
#python block1/v1/script1.py 的结果:
<module 'block2.v1.script2' from 'xxx/block2/v1/script2.py'>
<module 'block2.v1.script2' from 'xxx/block2/v1/script2.py'>
<module 'block2.v1' from 'xxx/block1/v1/__init__.py'>
block2 : ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'script2']
Traceback (most recent call last):
File "block1/v1/script1.py", line 17, in <module>
from block2.script2 import test
ModuleNotFoundError: No module named 'block2.script2'
预期结果
简而言之,我希望脚本 1 中有这种调用语法:
from block2.script2 import test
test()
能够运行我的测试功能
非常感谢帮助,我不知道是不是很清楚!
【问题讨论】:
标签: python import module python-importlib