之前其实也讨论过这个话题,但是没有总结出一个简单的结论,报错其实都是相对导入带来的问题,一定不要运行有.或者…相对导入的脚本,这是必然会报错的,这种情况,它只能作为被调用模块,且要么在执行脚本的下一级作为包(注意这个等级要很低,参考之前的例子以及tensorlayer),要么直接添加环境变量(系统自动自带的或者自己添加,或者程序中软连接语句),要么直接采用特定的导入包吧(比如importlib等等),还有就是文件模块与包还是有区别的,文件夹是文件夹,是包,最好带个__init__文件(虽然我发现好像不带也可以),而模块通常只是一个py文件,要求低得多,有时候就算是多个文件组成一个文件夹也没关系,只要不要相互以相对导入的方式导入耦合就没问题,除非只是作为模块被调用。

网上有些稀奇古怪的解决方案,有的可能奏效,在特定场合,但由的估计不好使,但是应该都是从上面的角度出发的,绝对路径,环境变量,采用专用导入包等等。
比如:

典型的还是不能直接作为脚本运行,只能被调用。

某些情况下解决linux或者windows以及网络编程中跨平台兼容性问题,但不是很扣主题。类似的还有斜杠与反斜杠,双斜杠,转义字符的问题。

典型的有问题,只有加点才可以,也有可能编译器的问题,也有可能坐着使用的方法不一样,或者打错了。。

讲了半天没讲清楚要点,但是却是要经常使用一些信息来做辅助判断,比如__main____file__以及其他的包提供的信息,一定要注意指函数入口,main函数的真正归属,工作空间。

算是说到点子上了,但是没说这个模块式只能调用的,不能直接运行的。python自带的安装位置还是强,解决了很多问题,自带的绝对路径索引。

还行,但是没说完整,也没说到位。

原理分析不够。

这个可以说讲的很细致了,也讲述了python工作机理,也描述了包的组成。

太幼稚,有些情况还是不能很好地使用。

这个讲的也不错,但是缺乏示例。