gpt4 book ai didi

python - 如何从包内导入包?

转载 作者:行者123 更新时间:2023-12-01 05:32:16 27 4
gpt4 key购买 nike

我正在编写一个小包,并尝试在其中包含一个演示脚本作为示例。但是,我似乎无法从内部干净地导入该包,就好像我在它之外一样。

目录结构如下:

trainer/
__init__.py
helper.py
trainer.py
[...more files...]
demo.py

demo.py 中,我无法执行 from .. import trainer 因为它提示“尝试在非包中进行相对导入”,尽管 __init__ .py。如果我将演示移至一个目录并导入训练器,它可以正常工作,但我试图将其与包放在一起。

看起来像黑客的导入__init__作为训练器可以工作,但是eeeew。

直接从整个模块导入各个位也可以,但会造成一个困惑的例子。我的尝试完全被误导了还是有更好的解决方案?

最佳答案

如果您尝试将 demo.py 作为 python demo.py 运行,您遇到的问题可能与 here 相同。 .

发生的事情是Python的相对导入机制通过使用当前模块的__name__来工作。当您直接执行模块时,无论实际模块名称是什么,__name__都会设置“__main__”。因此,相对(包内)导入不起作用。

要解决此问题,您可以执行以下操作:

  • 执行demo.py作为包中的模块,如下所示:python -m trainer.demo。这应该可以修复错误,但您仍将导入 trainer.py 模块而不是包。

  • 现在将 from __future__ importabsolute_import 添加到 demo.py,这将导致默认情况下您的导入仅是绝对导入,这意味着相对导入必须显式(如 from .import (...))。这是强制import trainer导入整个顶级包,而不是模块。

关于python - 如何从包内导入包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19942700/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com