问题描述:
本人写了一个Python测试程序,里面调用了自己写的另外一个package:autodriving.sumo_env,如下所示:
from autodriving.sumo_env import SumoEnv
测试程序与package:autodriving.sumo_env位于相同的目录。使用Python 3.5环境能正常运行,使用Python 2.7环境运行报出如下错误:
Traceback (most recent call last):
File "autodriving/ego_runner.py", line 35, in <module>
from autodriving.sumo_env import SumoEnv
ImportError: No module named autodriving.sumo_env
问题分析:
根据该错误信息,上网找到一些解决方案,基本与《ImportError: No module named 通用解决方法》类似,我一看就知道根本没找到问题症结,是误人子弟的解决方案。于是继续上网查找Python package的原理,终于找到了如靠谱答案(见该网页):
在Python 3.3之前,需要在每个目录中添加一个空白的__init__.py文件作为package的标识,如果没有该文件,该目录就不会认为是package。当然,__init__.py文件中还可以填写一些额外的内容,但与本文问题无关,此处按下不表。但在Python 3.3之后,就不再需要该文件了,原文描述如下(见该网页):
PEP 420: Implicit Namespace Packages
Native support for package directories that don’t require __init__.py marker files and can
automatically span multiple path segments (inspired by various third party approaches to
namespace packages, as described in PEP 420)
解决方案:
考虑到Python 2.7使用范围挺广,在定义package时,每个目录中添加一个空白的__init__.py文件作为package的标识,问题得到解决。
博客详细介绍了在Python2.7环境下,由于缺少__init__.py文件导致无法正确识别自定义包autodriving.sumo_env的问题。作者通过添加__init__.py文件解决了这一问题,确保了Python2.7和Python3.5环境下的一致性。
1万+

被折叠的 条评论
为什么被折叠?



