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
.
实际上,您可以将其保留为子包,只需将导入更改为上述建议即可。
这是我当前项目的文件结构:
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
.
实际上,您可以将其保留为子包,只需将导入更改为上述建议即可。