Python相对导入导致SyntaxError异常

Python相对导入导致SyntaxError异常,python,import,syntax-error,Python,Import,Syntax Error,根据,自python 2.5以来,就支持相对导入和包内引用。我目前正在运行Python 2.7.3。因此,我尝试在自己的包中实现它,以便使用它进行更简单的导入。我惊讶地发现它向我抛出了一个SyntaxError异常,我希望有人能帮助我找到原因 我为测试设置了一个测试目录: tester ├── __init__.py ├── first_level.py └── sub ├── __init__.py └── second_level.py 两个_uinit__uuu.py模块

根据,自python 2.5以来,就支持相对导入和包内引用。我目前正在运行Python 2.7.3。因此,我尝试在自己的包中实现它,以便使用它进行更简单的导入。我惊讶地发现它向我抛出了一个SyntaxError异常,我希望有人能帮助我找到原因

我为测试设置了一个测试目录:

tester
├── __init__.py
├── first_level.py
└── sub
    ├── __init__.py
    └── second_level.py
两个_uinit__uuu.py模块都为空。其他模块包括:




当我尝试导入第二级模块时,出现以下错误:

Python 2.7.3 (default, Aug  1 2012, 14:42:42) 
[GCC 4.2.1 Compatible Apple Clang 4.0 ((tags/Apple/clang-421.0.57))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Welcome!
>>> import tester
>>> import tester.sub.second_level
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "tester/sub/second_level.py", line 1
    import ..first_level
           ^
SyntaxError: invalid syntax
Python 2.7.3(默认,2012年8月1日14:42:42)
达尔文上的[GCC 4.2.1兼容Apple Clang 4.0((tags/Apple/Clang-421.0.57))]
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
欢迎
>>>进口测试仪
>>>导入tester.sub.second_级别
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“tester/sub/second_level.py”,第1行
导入..第一级
^
SyntaxError:无效语法

我希望这两行会一行接一行地打印出来,但它却引发了一个异常。那么,我是不是做错了?你还有别的想法吗

您不能像那样导入模块<代码>导入..blah不是有效的导入语法。您需要从..执行
。。导入第一级

我通常会执行以下操作:

import sys 
sys.path.append("/home/me/tester")
import first_level 

希望这有帮助~Ben

这是一个坏主意,因为它会污染全局
系统路径
,如果
测试仪中的模块与其他地方的模块同名,可能会导致以后的混淆。包的整个要点是通过创建一个单独的包名称空间来避免这种情况,在全局
sys.path
中只包含顶级包。基于此,如果
blah
是包,这是有效的语法。检查上面链接中的示例,即:
from..filters import equalizer
,其中
filters
是一个包,
equalizer
是一个模块。您不应该这样概括。@rbaleksandar:不,示例使用了来自
from..blah import stuff
有效<代码>导入..等等
不是。您只能将点表示法相对导入与
import
from
形式一起使用(如您链接到的文档中所述)。我知道这一点,但您的评论可以作为一般结论来阅读。您应该添加类似“在您的情况下,您无法导入…因为…”的内容。我在导入行上仍然出现“误导性”语法错误,但结果表明,语法错误在我尝试导入的文件中,而不是在实际的导入行中。需要记住的是:)
Python 2.7.3 (default, Aug  1 2012, 14:42:42) 
[GCC 4.2.1 Compatible Apple Clang 4.0 ((tags/Apple/clang-421.0.57))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Welcome!
>>> import tester
>>> import tester.sub.second_level
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "tester/sub/second_level.py", line 1
    import ..first_level
           ^
SyntaxError: invalid syntax
import sys 
sys.path.append("/home/me/tester")
import first_level