繁体   English   中英

子模块的 importlib.import_module ModuleNotFoundError

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

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