使用语法3.x时,PyDev未解决包内模块的导入错误

时间:2016-05-04 21:22:04

标签: pydev

我认为在为项目首选项选择Grammar 3.x时,PyDev(版本4.6)如何识别包内导入存在错误。我有一个这样的项目:

foobar
    mypack
        __init__.py
        mod1.py
        mod2.py

mod2.py只是说

from mod1 import fun1

mod1.py只是说

def fun1():
    print("Hey we are in fun1 in mod1")

如果项目Python项目首选项设置为使用Grammar 3.0-3.5,使用Python 3.4解释器,并且我打开mod2.py,则行from mod1 import fun1会突出显示错误Unresolved import: fun1 。如果我将Python项目首选项更改为使用Grammar 2.7,请关闭文件mod2.py并重新打开它,错误消失。只需通过来回更改语法,关闭/重新打开文件,我就可以使错误显示/消失。

因此,似乎在PyDev中将语法设置为3.x会导致将包内导入错误地标记为导入错误。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

PyDev做得很好......在Python 3上,相对导入必须写成:

<img src="@Model.imageFile" alt="your image" class="img-responsive"/>

如果导入不是以点开头,则它会将其视为绝对导入(并且将正确显示错误,因为无法解析导入文件的绝对路径)。

答案 1 :(得分:0)

所以我真正的问题是让PyDev不报告有关导入的错误,并且能够调试埋在包含main()的软件包中的模块进行调试。我的解决方案是使用相对导入(如Fabio的答案中所述),然后执行以下操作以进行调试。假设我想使用具有相对导入的PyDev运行模块pack1.subpack2.subpack3.subpack4.modtodebug,并且具有main()函数。在我的项目的顶层,我有一个模块debugmain.py,读取

from pack1.subpack2.subpack3.subpack4.modtodebug import main as debugmain

if __name__ == '__main__':
    debugmain()

然后我有debugmain.py的一个运行配置,每次我想调试一个不同的模块时,我只需编辑debugmain.py中的代码指向该模块。

我希望这可以帮助其他人解决这类问题。