Python 不会在子包中导入父包

Python won't import parent package within a subpackage

这是我当前项目的文件结构:

mechanism
│   .gitignore
│   dataframe.py
│   mechanism.py
│   vectors.py
│   __init__.py
│
├───examples
│       temp.py
│       __init__.py

我希望能够在 examples 下的任何文件中使用父包的内容。在 temp.py 中,我有以下行:

from ..vectors import Vector

这会引发以下错误:

Traceback (most recent call last):
  File "C:\Users\gmbra\Downloads\Python Programs\Mechanisms\mechanism\examples\temp.py", line 1, in <module>
    from ..vectors import Vector
ImportError: attempted relative import with no known parent package

我不确定这里发生了什么,因为我遵循了文档中 here 中第 5.7 节的语法。我该怎么做才能解决这个问题?

temp.py 是项目结构中的顶级脚本,而不是 python 包中的脚本。而 relative import 是包作用域的概念。所以你得到了错误。

通常,对于您的情况,建议的解决方案如下:

temp.py:

from vectors import Vector

执行:

$ cd mechanism
$ PYTHONPATH=. python3 examples/temp.py

您在评论中提到您正在直接执行 temp.py。当你这样做时,temp.py 包命名空间不被认为是 mechanism 的子包,而是它自己的包。这就是它不起作用的原因。

如果您打算直接从 examples 调用文件,最好将它们移出包并执行 from mechanism.vectors import Vector.

实际上,您可以将其保留为子包,只需将导入更改为上述建议即可。