问题描述:
本人写了一个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
的标识,问题得到解决。
转载自:https://blog.csdn.net/davidhopper/article/details/81979769