[英]ModuleNotFoundError when using importlib.import_module
[英]ModuleNotFoundError with importlib.import_module for submodule
(我的英语真的很糟糕抱歉)
我写了一个 OOP 代码,我想要一个导入(自动使用 importlib)一些“模板”来执行的主文件。 每个模板都有一个“主文件”和其他对象,用于良好的定向编程。 但是我无法导入我的“主模块”,因为 importlib 直接在开头代码的 import object 上引发 ModuleNotFoundError(下面的示例)。 请帮忙。 我尝试使用 inspect lib 和 ModuleFinder lib 来解决,或者强制在 os.listdir 中解析我的文件名,但是……什么都没有……我完全被阻止了。
--main.py
--templates/
---__init__.py
---Beer/
----__init__.py
----Beer.py
----Livraison.py
主程序
...
def import_templates(package, recursive=True):
if isinstance(package, str):
print(package)
package = import_module(package)
print('1 : ' + str(package))
results = {}
for loader, name, is_pkg in walk_packages(package.__path__):
full_name = package.__name__ + '.' + name
results[name] = import_module(full_name)
if recursive and is_pkg:
results.update(import_templates(full_name))
return results
...
啤酒.py
...
from Livraison import Livraison
...
output终端
templates
1 : <module 'templates' from 'PATH/GestionEmbed/templates/__init__.py'>
templates.Beer
1 : <module 'templates.Beer' from 'PATH/GestionEmbed/templates/Beer/__init__.py'>
Traceback (most recent call last):
File "PATH/GestionEmbed/main.py", line 59, in <module>
tmp = import_templates("templates")
File "PATH/GestionEmbed/main.py", line 45, in import_templates
results.update(import_templates(full_name))
File "PATH/GestionEmbed/main.py", line 43, in import_templates
results[name] = import_module(full_name)
File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "PATH/GestionEmbed/templates/Beer/Beer.py", line 7, in <module>
from Livraison import Livraison
ModuleNotFoundError: No module named 'Livraison'
如果你能帮助我,提前谢谢你(再次抱歉我的英语^^)
您正在运行main.py
,它导入Beer.py
,它试图导入Livraison.py
。
问题是Beer.py
中的那一行说: from Livraison import Livraison
。 Python 尝试基于 main.py 的main.py
Livraison
所以就像你在 main.py 中写from Livraison import Livraison
main.py
。 与main.py
Livraison.py
所以报错。
要基于 Beer.py 的Beer.py
,请使用:
from .Livraison import Livraison
在Beer.py
中。
的.
表示Livraison
基于 Beer.py 上的 position 导入Beer.py
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.