我认为在为项目首选项选择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会导致将包内导入错误地标记为导入错误。
有什么建议吗?
答案 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中的代码指向该模块。
我希望这可以帮助其他人解决这类问题。