ModuleNotFoundError: No module named xxx 的原因和解决办法(附带新大陆)
PS:要转载请注明出处,本人版权所有。
PS: 这个只是基于《我自己》的理解,
如果和你的原则及想法相冲突,请谅解,勿喷。
前置说明
  本文作为本人csdn blog的主站的备份。(BlogID=094)
  本文发布于 2020-06-16 14:22:07,现用MarkDown+图床做备份更新。blog原图已丢失,使用csdn所存的图进行更新。(BlogID=094)
环境说明
无
前言
无
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: 要转载请注明出处,本人版权所有。
PS: 有问题请留言,看到后我会第一时间回复。
ModuleNotFoundError: No module named xxx 的原因和解决办法(附带新大陆)的更多相关文章
- Django启动时提示ModuleNotFoundError: No module named 'xxx'的原因
		①创建项目:django-admin startproject DL ②创建app:python manage.py startapp myapp ③启动服务:python manage.py run ... 
- pyinstaller打包多个py文件仍报错ModuleNotFoundError: No module named 'xxx'
		[问题现象] 使用pyinstaller A.py -p b.py -p c.py打包多个文件 或者使用main.spec在Analysis配置好各个文件打包 打包成功后,运行main.exe仍然报错 ... 
- ModuleNotFoundError: No module named 'xxx'; 'xxx' is not a package
		错误: ModuleNotFoundError: No module named 'xxx'; 'xxx' is not a package 通过pycharm对脚本进行debug时,出现了如下错: ... 
- linux/cmd中python路径导入ModuleNotFoundError: No module named 'xxx'
		在linux或者直接在cmd中运行python文件时 会遇到导包错误的情况ModuleNotFoundError: No module named 'xxx’由于不在pycharm中 所以这里不能将上 ... 
- 关于在pycharm下提示ModuleNotFoundError: No module named 'XXX' 的一种可能
		在pycharm下出现“ModuleNotFoundError: No module named 'XXX' ”提示时, 在网上找大部分的解决方案是重新在pycharm里安装对应的模块,但是这不是我要 ... 
- python程序在命令行执行提示ModuleNotFoundError: No module named 'XXX' 解决方法
		在ide中执行python程序,都已经在默认的项目路径中,所以直接执行是没有问题的.但是在cmd中执行程序,所在路径是python的搜索路径,如果涉及到import引用就会报类似ImportError ... 
- 关于ModuleNotFoundError: No module named 'xxx' 模块导入失败问题
		我在执行数据库迁移命令的时候pycharm报错,提示ModuleNotFoundError: No module named 'ckeditor',但是我确实是导进来了,而且这个包也从settings ... 
- 【转】modulenotfounderror: no module named 'matplotlib._path'问题的解决
		今天在装matplotlib包的时候遇到这样的问题,在网上找了很长时间没有类似很好的解决方法,最后自己 研究找到了解决的方法. 之前在pycharm里面已经装了matplotlib包,之后觉着下载包挺 ... 
- [经验总结] 在 windows 命令窗口中运行 python 脚本时提示 ModuleNotFoundError: No module named 'xxx'
		先给出的代码和目录结构 获取CPU代码如下: # -*- coding:utf-8 -*- ''' Created on Sep 10, 2018 @author: ''' import sys im ... 
- 工作小记[csv文件、admin中filed与list_display区别、ModuleNotFoundError: No module named'xxx'、django创建admin用户]
		CSV-Comma Separated Values,CSV文件可以直接用Excel表格打开,如果用文本打开属性之间用逗号隔开,Python有直接操作CSV文件的函数. fileds字段控制“修改添加 ... 
随机推荐
- JuiceFS 在大搜车数据平台的实践
			大搜车已经搭建起比较完整的汽车产业互联网协同生态.在这一生态中,不仅涵盖了大搜车已经数字化的全国 90% 中大型二手车商.9000+ 家 4S 店和 70000+ 家新车二网,还包括大搜车旗下车易拍. ... 
- PVE上启用Intel核显的SR-IOV vGPU
			介绍 Intel SR-IOV vGPU是一种硬件虚拟化技术,它允许多个虚拟机共享单个物理GPU,而不会降低性能.SR-IOV定义了一种标准方法,通过将设备分区为多个虚拟功能来共享物理设备功能.每个虚 ... 
- .NET Core开发实战(第33课:集成事件:使用RabbitMQ来实现EventBus)--学习笔记(上)
			33 | 集成事件:使用RabbitMQ来实现EventBus 这一节我们来讲解如何通过 CAP 组件和 RabbitMQ 来实现 EventBus 要实现 EventBus,我们这里借助了 Rabb ... 
- 鹏程杯子2023 pwn
			主要就是修改stdin的最后几位,使他变为write,然后泄露libc,为所欲为即可. 本人是卡在不知道stdin那里可以修改. 然后使用一下jmp qword rbp这个gadget 0x400a9 ... 
- java 手写并发框架(二)异步转同步框架封装锁策略
			序言 上一节我们学习了异步查询转同步的 7 种实现方式,今天我们就来学习一下,如何对其进行封装,使其成为一个更加便于使用的工具. 思维导图如下: 拓展阅读 java 手写并发框架(1)异步查询转同步的 ... 
- 【Unity3D】伽马校正
			1 伽马相关概念 1.1 人眼对亮度变化的感知  人眼对亮度变化的感知不是线性的,如下图,人眼对亮区的亮度变化不太敏感,对暗区的亮度变化较敏感.另外,我们可以想象一下,在一个黑暗的房间里,由 1 根 ... 
- Mysql一张表可以存储多少数据
			Mysql一张表可以存储多少数据 在操作系统中,我们知道为了跟磁盘交互,内存也是分页的,一页大小4KB.同样的在MySQL中为了提高吞吐率,数据也是分页的,不过MySQL的数据页大小是16KB.(确切 ... 
- DVWA XSS
			XSS Store hign level <?php if( isset( $_POST[ 'btnSign' ] ) ) { // Get input $message = trim( $_P ... 
- [Android 逆向]绕过小米需插卡安装apk限制
			1. 确保自己手机是root的了 2. 给手机安装busybox,使可以用vi编辑文件 安装方法: 0. adb shell getprop ro.product.cpu.abi 获得 cpu架构信息 ... 
- SVN培训笔记(下拉项目、同步修改、添加文件、修改文件、删除文件、改名文件等)
			前言 为了方便新加入团队的员工熟悉团队协作开发. 为了将好东西整理分享给有需要的网友. 将SVN内部员工培训文档公开,以方便更多的人,提高知识获取速度,尽快熟悉协同开发. 本文档培训员工对于 ... 
