最近遇见一个Python模块导入自己踩到的坑,搞了好久才整明白,记录一下,也给在同样采坑的小伙伴借鉴一下。

错误现象很明显,相信大家遇到的报错都一样,但是就是不知道为什么,报错如下:

 

 导入模块源码如下:

 

 百思不得其解啊,各种百度和研读女神博客,感觉模块导入这块还是相对容易理解和接受的,为什么就是报错呢。

这里推荐一下女神写的很详细的一篇博客:

https://www.cnblogs.com/Eva-J/articles/7292109.html

好了,进入正题吧,是什么原因导致报这个错呢,上面一行也是一样的方法导入,怎么就没报错。奇怪吧?

原因就是。。。

你导入的模块,也导入了你。不能相互导入!!!

就是server_common模块中已经导入了server_auth模块,你现在又在server_auth模块中再导入server_common,这个样子是不行滴。

那要怎么解决呢?

找到具体原因了,事情就好办了,把共用的方法提出来或者都写到一个模块里,然后只导入一个模块就好了。就是这么简单!!

另外,我有个习惯就是在pycharm里写好的代码要在dose或其他环境执行一下是否可用,避免出现开发环境运行没问题,到了生产环境就运行失败的情况。

结果就出现了以下报错,pycharm运行ok,在dose窗口运行就报找不到模块的错误。如下图:

 

尽管start_server.py文件里已经添加了如下信息:

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
sys.path.append(BASE_DIR)

原因是如果只是通过相对路径执行的话,代码里的添加路径信息就没法把正确的路径添加到sys.path里,才导致找不到对应的模块,pycharm是帮你把文件的绝对路径添加上了,所以才没有报错。

 

posted on 2019-09-17 11:24  雨之夜&秋  阅读(2324)  评论(0编辑  收藏  举报