python - 多级相对导入

标签 python relative-path python-packaging

多级相对导入

我有以下文件夹结构

top\
   __init__.py
   util\
      __init__.py
      utiltest.py
   foo\
      __init__.py
      foo.py
      bar\
         __init__.py
         foobar.py

我想从 foobar.py 访问模块 utiltest.py。我尝试了以下相对导入,但这不起作用: 从 ...util.utiltest 导入 *

我总是得到 ValueError: 尝试相对导入超出顶级包

这样的多级相对导入怎么做?

最佳答案

我意识到这是一个老问题,但我觉得接受的答案可能错过了提问者代码的主要问题。严格来说,这并没有错,但它给出的建议只是巧合地解决了真正的问题。

真正的问题是 top\foo\bar 中的 foobar.py 文件作为脚本运行。当尝试(正确!)相对导入时,它会失败,因为 Python 解释器不理解包结构。

最好的解决办法是不按文件名运行 foobar.py,而是使用 -m 标志来告诉解释器运行 top.foo.bar.foobar 模块。这样 Python 就会知道它正在加载的主模块在一个包中,并且它会准确地知道相对导入所指的位置。

关于python - 多级相对导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9277200/

相关文章:

python - 如何加快 Django 中大型数据集的迭代速度

python - 处理 Sprite 与静态的有角度的矩形障碍物的碰撞

Apache本地配置正确解析文件

python - 错误: package directory XYZ does not exist

python - 无法在 Windows 上安装 textract

python - 如何使用 pandas 中的另一列更新一列

python - 解析生成的网页 Python Selenium

html - 如何在 Django 应用程序中使用预制 index.html 模板和 css 的相对路径?

c - 相对路径/绝对路径查询在当前目录中不起作用

python - 如何导入其他 Python 文件?