我的相对进口不起作用

时间:2016-02-02 02:24:19

标签: python import

我试图从父目录导入模块,但我一直收到导入错误。

我的目录:

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

3 个答案:

答案 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