如何在包中导入同级文件?

How to import sibling file within a package?

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

我该如何解决这个问题?

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

from . import utils.file

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


我最初建议

from .utils import file

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