Python 2.7出现但Python 3.5不出现“ImportError: No module named xxx”的解决方案

问题描述:

本人写了一个Python测试程序,里面调用了自己写的另外一个packageautodriving.sumo_env,如下所示:

from autodriving.sumo_env import SumoEnv

测试程序与packageautodriving.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

原文地址:https://www.cnblogs.com/yddzyy/p/13511916.html