Python2升级到Python3 导入模块失败

from modulefather  import moduleson

功能:在路径sys.path中寻找名为modulefather的模块,导入modulefather模块中的moduleson。

sys.path路径包含:

  • 当前的工作路径;
  • 环境变量PYTHONPATH指定的路径;
  • pip下载的标准(第三方)包site-paceages的路径;
  • 开发者指定的路径sys.path.append();

模块可以是包含.py的文件夹,也可以是.py文件:

若modulefather模块是一个.py文件,则moduleson是.py里的对象;若modulefather是一个包含.py文件的文件夹,moduleson可以是是.py文件,或者另一个包含.py的文件夹。

在Python2中,把一个文件夹认定为一个模块需要在文件夹中包含__init__.py的文件,否则无法读入;而Ptyhon3无需__init__.py ,反而是如果在sys.path中一旦遇到包含__init__.py的文件夹,就把这个文件夹当成唯一的模块,不再去寻找sys.path中的其他路径中的模块,导致开发者指定的模块往往无法正常导入。

解决方法:对于Python2的代码,可以创建虚拟环境envs,在虚拟环境中使用Python2运行,具体操作可以查看我的博客:利用conda在python3.6中创建虚拟环境python2.7

Reference:

1. http://python-notes.curiousefficiency.org/en/latest/python_concepts/import_traps.html

2. https://leemendelowitz.github.io/blog/how-does-python-find-packages.html

扫描二维码关注公众号,回复: 2972704 查看本文章

猜你喜欢

转载自blog.csdn.net/Cxiazaiyu/article/details/81208832