“import error” 的两种解决思路
前言
在导入自定义模块的过程中,如果要导入的包和本py文件在同一个路径下,直接import即可,不会出现问题。但是如果是引用父级甚至是上上级的包,有可能出现“no module named ***”的错误,下面是两种解决思路:
1. 使用相对路径
如图,现在ssd_vgg_300.py
要引用utils
中的ssd_utils.py
,可以使用import ..utils.nets_factory.py
2. 使用绝对路径
如果我们要引入的包在上上级甚至更复杂的位置,可以考虑增加该包的路径到sys
里面:sys.path.append('#########')
但是这样做似乎过于复杂,不符合python简洁的气质。能不能利用原有的“path”做文章?
首先我们可以看一下这个项目中有哪些“path”,在ssd_vgg_300.py
中打印sys.path
可以发现除了python解释器相关的文件外还有两个路径:C:\\Users\\小狮子\\Desktop\\online_class_V4.0\\online_class_V4\\nets\\nets_model
C:\\Users\\小狮子\\Desktop\\online_class_V4.0
不难发现第一个就是本文件所在的路径,所以同目录下的包可以直接import。而第二个则是项目路径,所以我们不妨以项目路径当作根节点,使用“绝对路径”,比如:ssd_vgg_300.py
要引用preprocessing.py
中的train_ssd_network.py
,可以使用import online_class_V4.preprocessing.train_ssd_network.py