bug 1:提示不能导入名为XXXX的包
例如:flask中,注册蓝图的时候,需要导入相应的蓝图,很可能就会出现这个问题
ImportError: cannot import name 'XXXX'
解决思路:这种类型的bug,绝大多数都是循环导入(相互引用)引起的,可以查看错误信息位置或者查看调用堆栈,查看每一步调用的顺序。最直接有效的方法就是将出错的包或模块在使用的时候再导入,不要在程序最上方一开始就先行导入,即推迟导入。
bug2:from .(或者…) import YY类似这种方式导入报以下错误:
(1)SystemError: Parent module '' not loaded, cannot perform relative import
(2)ValueError: attempted relative import beyond top-level package # 相对导入时超出了最高层级的package
原因:
在涉及到相对导入时,package所对应的文件夹必须正确的被python解释器视作package,而不是普通文件夹。否则由于不被视作package,无法利用package之间的嵌套关系实现python中包的相对导入。
解决思路:
(1)为方便项目开发导入便利,可将通常需要用到的python package(包含__init__文件的文件夹),在pycharm开发时,设置该文件夹为Sources root,然后下次导包就从它下面的子目录开始。