【问题标题】:How to import sibling file within a package?如何在包中导入兄弟文件?
【发布时间】:2022-01-03 13:33:12
【问题描述】:
NameChanger

  -main.py
  -__init__.py

  ui
    -__init__.py
    -utils.py

  utils
    -__init__.py
    -file.py

我想在NameChanger/ui/utils.py 中导入NameChanger/utils/file.py

所以我尝试了from NameChanger.utils import file,但出现了这个错误ModuleNotFoundError: No module named 'NameChanger'

我也尝试了from ...NameChanger.utils import file,出现了这个错误ValueError: attempted relative import beyond top-level package

我该如何解决这个问题?

【问题讨论】:

  • from utils import file?
  • 你是如何执行你的 Python 代码的?更重要的是,从哪里来?因为在 90% 的情况下,这会导致导入错误。不要在包内部执行Python代码。在包目录之外运行一个外部脚本来导入包。
  • 请不要在您的问题中添加“已解决”。相反,请接受您收到的答案,或者发布您自己的答案并接受,如果您愿意。接受答案通过将问题标记为已解决来帮助未来的访问者。另见help.

标签: python python-3.x python-import


【解决方案1】:

ui/utils.py 中,使用相对导入。

from . import utils.file

NameChanger 本身可能不在您的搜索路径中(也不需要)。但由于NameChanger 是一个包,因此NameChanger子包 中包含的模块中的相对导入应该可以工作。


我最初建议

from .utils import file

只有在 utils 确实将 file 作为模块级属性时才有效,而包通常不是这种情况。

【讨论】:

  • 感谢您的评论。但它也没有用ImportError: cannot import name 'file' from 'ui.utils'
  • 啊等文件名
  • 我也搞砸了。包不会自动将其模块公开为属性。也可以试试from . import utils.file
  • 感谢您的帮助。现在它工作正常:))
猜你喜欢
  • 2021-10-05
  • 2020-06-26
  • 2017-09-25
  • 1970-01-01
相关资源
最近更新 更多