#PS:要转载请注明出处,本人版权所有

#PS:这个只是 《 我自己 》理解,如果和你的

#原则相冲突,请谅解,勿喷

ModuleNotFoundError: No module named ‘xxx’ 分析

这个问题只要是用过python的人,一般或多或少都会遇到过这个问题,这个问题其实很明确,就是你import的module找不到。
关于为啥找不到的原因,倒是有很多花里胡哨原因。

Python module的搜索路径

python的module搜索路径,其实是编译python的时候就有相关的默认配置的。例如:

python -m sysconfig


这里面就包含了相应的搜索路径。但是我们执行如下命令看真实的搜索路径,就会发现一些奇怪的东西。

python3 -c “import sys;print(sys.path)”

其实这里可以看出多了一些不常见的搜索目录,其实出了我们常见的site-packages外,python还有其他builtin 和一些独立的自带的模块。site-packages在约定中,是用来存放第三方库的,也就是你pip install安装的module.
这里有个重要的目录是/usr/lib/python3.6/lib-dynload/,里面的so是python 自带模块的底层实现,比如ctype 对应的实现是 _ctype.

上面sys.path包含的路径,就是python import 模块时的全部搜索路径了。当然,还包含一个当前路径,也就是你执行python命令的路径,也会被默认搜索。

此外,通过环境变量PYTHONPATH也可以向sys.path添加值。

正常情况下,我们就可以通过在这些目录里面放置我们的模块,然后在python里面import即可。

ModuleNotFoundError: No module named ‘xxx’ 可能原因和解决方案

s1

原因:sys.path 所包含的所有目录中,确实无对应的xxx模块。
解决方法:这个时候,通过pip install安装即可解决。

s2

原因:sys.path 所包含的所有目录中,有对应的xxx模块,但是有多个地方都存在(可能是同样的版本,可能是不一样的版本)。
解决方法:所有的目录中,只保留一个xxx模块即可,其他的都uninstall了。(小提示:这里推荐使用虚拟环境,这样就很少出现这种情况,出现这种情况的本质原因还是一个系统配置了太多的python版本)

s3 (新大陆)

这种情况也是我最近遇到的新坑。具体表现是sys.path目录中有xxx模块,而且还有且只有一个。根据我们上文的s1,s2情况来看,这就应该解决的问题了呀,可是并没有。这就让我很懵逼。

情况复现:我手动编译了一个python3,需要使用python c interface功能。我同时生成了debug和release的python3的库。在我尝试import numpy的时候,release的库一直ok,但是debug的python库一直报找不到numpy的库。(我确定numpy在sys.path中,而且只有一个)

经过我大量的寻找,在如下的一个链接(https://bugs.python.org/issue36716)里面,找到了答案。

原来python 的debug和release版本,import 的时候,一些库的命名上面是有区别的。
我们分别在linux和win下执行如下:

import importlib.machinery
print(importlib.machinery.all_suffixes())

linux:

windows:
release:

debug:

可以看到,这里的.pyd(类似windows dll)和.so(类似linux so)分别是不通平台下,python import 需要的库的后缀。

同时我们也可以看到,同一平台下,release 和 debug版本的python import的时候,需要的module名字可能有些诧异,最直白的就是多了_d。
注意:windows-debug图中画红框部分,是由于我改了python的源码,它才会认识不带_d的module。哪怕这个module命名不带_d,但是它必须是debug版本的module才行,换句话说,仅仅是命名上的区别。如果你弄一个release的库,我这个python的debug版本依然不会import成功。改原因的原因也很苦逼,就是通过编译生成的debug module,它不会自动的给你加上_d,坑爹,如果这种模块多,需要你自己重命名的module太多了,于是,直接该源码才是很爽的方法。

解决方法也很简单的:直接编译一个debug版本的xxx模块即可。同时修改生成的module库,加上_d即可解决。

原因也很简单就是库的名字没有对上,导致找不到。

一般来说,s3这种情况大家都不会碰见的,除非和我一样,用python c interface的时候,在debug模式下使用,就可能会出现这种情况。找起答案来,也比较麻烦。

未完待续(以后遇到新的再补充)

#PS:请尊重原创,不喜勿喷

#PS:要转载请注明出处,本人版权所有.

有问题请留言,看到后我会第一时间回复

ModuleNotFoundError: No module named xxx 的原因和解决办法(附带新大陆)相关推荐

  1. Python3 多线程问题:ModuleNotFoundError: No module named 'thread',原因及解决办法。

    python3 导入thread报错,把thread改为_thread就好了. 报错信息: Traceback (most recent call last):File "test.py&q ...

  2. ModuleNotFoundError: No module named xxx 的原因和万能解决办法

    找不到引用包,可能是改变了原有引用路径,只需要在配置脚本.bashrc中添加现有依赖包的存放路径即可. 例如: $ vi ~/.bashrc //在最后一行添加 export PYTHONPATHN= ...

  3. numpy报错:ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'(解决办法:安装更高版本的numpy)

    解决办法:安装高版本的numpy 先卸载当前numpy,不然没法直接装高版本的: pip uninstall numpy 再安装numpy: pip install -i https://pypi.t ...

  4. ModuleNotFoundError No module named ‘xxx‘可能的解决方案大全

    "ModuleNotFoundError: No module named 'xxx'"这个报错是个非常常见的报错,几乎每个python程序员都遇到过,导致这个报错的原因也非常多, ...

  5. ModuleNotFoundError: No module named ‘xxx‘可能的解决方案大全

    "ModuleNotFoundError: No module named 'xxx'"这个报错是个非常常见的报错,几乎每个python程序员都遇到过,导致这个报错的原因也非常多, ...

  6. ModuleNotFoundError: No module named 'xxx'; 'xxx' is not a package

    ModuleNotFoundError: No module named 'xxx'; 'xxx' is not a package 错误: ModuleNotFoundError: No modul ...

  7. ModuleNotFoundError: No module named ‘XXX ‘

    ModuleNotFoundError: No module named 'XXX ' 简述:诸如'ModuleNotFoundError: No module named 'XXX '的报错信息,只 ...

  8. python程序在命令行执行提示ModuleNotFoundError: No module named ‘XXX‘ 解决方法

    python程序在命令行执行提示ModuleNotFoundError: No module named 'XXX' 解决方法 参考文章: (1)python程序在命令行执行提示ModuleNotFo ...

  9. 关于在pycharm下提示ModuleNotFoundError: No module named 'XXX' 的一种可能

    在pycharm下出现"ModuleNotFoundError: No module named 'XXX' "提示时, 在网上找大部分的解决方案是重新在pycharm里安装对应的 ...

最新文章

  1. Hlink的Analysis基本搞定了
  2. 用verilog实现检测1的个数_入门指南:用Python实现实时目标检测(内附代码)
  3. JAVA学习之路 不走弯路,就是捷径
  4. DL:深度学习(神经网络)的简介、基础知识(神经元/感知机、训练策略、预测原理)、算法分类、经典案例应用之详细攻略
  5. PostgreSQL SQL 语言:数据定义
  6. 如何选择Web APP与Native App原生开发模式的区别(转)
  7. aio 系统原理 Java_Java新一代网络编程模型AIO原理及Linux系统AIO介绍
  8. Ajax基础知识梳理 1
  9. [HNOI2015] 亚瑟王
  10. layui自定义表单验证无效
  11. MAC安装Charles破解版简易教程
  12. C# 根据主机名称获得IP
  13. 自然语言处理领域介绍
  14. 使用vot-toolkit-python测试VOT2020
  15. Linux at atq atrm
  16. 安装个https证书要多少钱
  17. java批处理框架 pdf_《Spring Batch 批处理框架》PDF 下载
  18. 计算机软件系统技术,信息技术《计算机软件系统》教学设计
  19. 安卓学习日记——Shortcut
  20. 诸多检测、实验让你自己判断转基因大豆油是否安全无害!

热门文章

  1. php+mysql实现分页:上一页,下一页
  2. cnn风格迁移_深度学习能否对音乐进行风格迁移?
  3. Jenkins安装部署使用图文详解(非常详细)
  4. 不干胶标签材料之面材
  5. 6. ARM接口编程
  6. 十八个最常用的学术搜索引擎【转载】
  7. 【非编软件】达芬奇非编软件升级为付费版的6个理由
  8. 超级形缺工具20211226版
  9. 2010中国软件百强企业名单
  10. 销售困局:客户既要好的又嫌贵如何破局