我试图从父目录导入模块,但我一直收到导入错误。
我的目录:
spider1_2/
spider2.py
__init__.py
gui/
__init__.py
main.py
我尝试使用以下内容从main.py导入spider2.py。
from .. import spider2
但我收到此错误
Traceback (most recent call last):
File "main.py", line 10, in <module>
from .. import spider2
ValueError: Attempted relative import in non-package
答案 0 :(得分:0)
点 - 点表示法是指父包,而不是父目录。如果要从上面的目录导入,则需要在python库路径中具有该名称。
答案 1 :(得分:0)
您遇到的错误与您的运行方式main.py
有关。如果您从python main.py
文件夹中使用gui
,或者从顶层使用python spider1_2/gui.main.py
,则Python不会意识到文件的位置位于包内且main
真的是spider1_2.gui.main
。这就是为什么它说相对导入是在“非包装”模块中。
如果您使用main
从顶级文件夹(spider1_2
上方)运行python -m spider1_2.gui.main
模块,您的代码将正常运行。
通常,您需要将主脚本放在项目的顶层,而不是深入包中。实际的脚本可以是非常基本的,只需几行输入真实的逻辑(也许来自包中的深处)并调用它。
答案 2 :(得分:-1)
您没有指定您正在使用的Python版本。
在Python 3中,您不需要使用 init .py文件。
尝试import ..spider2