【 Python ModuleNotFoundError: No module named ‘xxx‘可能的解决方案大全】

news2025/1/15 13:43:54

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

本文主要介绍了Python ModuleNotFoundError: No module named ‘xxx‘可能的解决方案大全,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧Chat Gpt


文章目录

  • Python ModuleNotFoundError: No module named ‘xxx‘可能的解决方案大全
    • 1、module包没安装
    • 2、忘了import
    • 3、没有__init__.py文件
    • 4、安装的第三方module包的版本不对
    • 5、自建的包名与第三方安装的包名相同,导致import包的时候导错了包
    • 6、没设置PYTHONPATH环境变量
    • 7、自建的module包所在路径不在PYTHONPATH下
    • 8、不恰当的使用了相对导入
    • 最后

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

下面是我曾经遇到过的原因和解决方案:

  • module包没安装
  • 忘了import
  • 没有__init__.py文件
  • package包的版本不对
  • 自定义的包名与安装的包名相同,导致import包的时候导错了包
  • 没设置PYTHONPATH或者
  • 自建的module包所在路径不在PYTHONPATH下
  • 不恰当的使用了相对导入

下面是每种情况分别的解决方案:

1、module包没安装

使用场景: pip安装的第三方的包找不到

这个原因比较常见,解决办法就是pip install相应的包即可。如果不确定是否安装了这个包,使用下面的命令查找报警的那个包名,如果有输出结果,说明存在这个包,否则说明不存在这个包。

pip ``list` `| grep xxx  ``#把xxx替换成你的包名即可

如果在pip install的过程中提示包找不到,没有这个版本的包,可能是需要加上内置源,比如想要下载公司内部的包,那肯定需要加上公司的内置源才能找到相应的包。内置源的的使用方式加上-i参数即可。

pip install xxx -i https://xxx.xx.org/simple
# 比如下面是清华的源
# https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/

2、忘了import

使用场景: pip安装的第三方的包找不到、自建的module包找不到

module安装了但是没有import,这个原因也经常碰到,比如使用了datetime对象, 但是没有导入datetime包。解决方案同样非常简单,import 相应的包即可。比如下面的案例:

import os
import sys
import time
import datetime

这种情况最容易出现在从别处copy了一段了代码,但是没有把所有用到的module导入进来。

3、没有__init__.py文件

使用场景: 自建的module包找不到

因为python在解释包的时候会给本文件夹也就是本module下的所有文件建立一个索引放在当前路径下的__init__.py文件中,如果没有module的文件索引,我们即使import了指定的包,解释器还是找不到这个module下的文件的,因而我们一般会在每个文件夹下建一个空的__init__.py文件。如果一个文件夹下没有__init__.py文件,不会被当做一个module。

解决方案: 如果这个包是你自己写的,不妨检查一下待导入的包的根目录是否存在一个__init__.py文件,没有的话建一个空的__init__.py文件即可 (注意:不光要检查待导入的包根目录是否存在__init__.py文件,还需要检查当前程序所在文件夹是否存在这个文件)。如果这个包是pip install来的,那基本上可以忽略这种可能了,继续尝试下面的原因吧。

对于缺少__init__.py文件这种情况,还有一种报错形式是: ImportError: attempted relative import with no known parent package

4、安装的第三方module包的版本不对

使用场景: pip安装的第三方的包找不到

当看到这里,说明你已经检查并确定了module已经被安装了,import语句也有,init.py文件同样满足。这个时候或许可以怀疑一下是否是第三方包的版本与当前所用python版本不兼容。

解决方案是需要先卸载原来pip 安装的包,然后安装一个指定版本的包。比如python3不兼容 2.0版本及以上的DBUitls包,需要安装1.x的版本才行。

pip uninstall DBUtils
pip install DBUtils==1.3

可能有同学会问怎么确定这个module是否跟当前的python版本兼容呢?这个很遗憾的告诉你,我也不知道,但是可以尝试把’找不到xxx包’ 的报警提示直接复制到搜索引擎中搜索结果,如果是因为不兼容的原因很容易就能找到对应的说明博客,博客中一定会说明需要安装哪个版本的包比较合适,按照博客说明来操做即可。如果找了一圈都没发现关于不兼容的说法,放弃吧,说明你的问题应该不是这个情况。打起精神,继续尝试下一种解决方案吧。

5、自建的包名与第三方安装的包名相同,导致import包的时候导错了包

使用场景: pip安装的第三方的包找不到、自建的module包找不到

这种情况不经常发生,但是一旦发生,非常难找到原因。我曾经就自己在当前项目下创建了名为kafka的module文件夹(包含__init__.py文件的文件夹被称为module文件夹),而我又使用pip命令安装了一个kafka包,我在程序中使用import kafka命令导包的时候其实我是想导入pip下来的第三方包的,但是因为python包管理机制和包查找优先级,会优先从当前路径下找指定的包,如果当前文件夹下存在指定的包,则不会去PYATHONPATH或者其他路径下找包。

解决方式是给自己的文件夹换个名字,使得与第三方包名不冲突。

6、没设置PYTHONPATH环境变量

使用场景: pip安装的第三方的包找不到

有同学可能会说为什么有同学也没设置这个环境变量,为啥他就能顺利执行,我就不行,这里我只能说每个人的电脑的开发环境不一样,开发环境这种东西永远带有点玄学的意味。

解决方案:

再次执行安装intall这个包的命令,这时它不会再次安装,而是会提示xxx包在xx路径已经满足,而之所以找不到,是因为没有把这个路径添加到PYTHONPATH这一环境变量中。这里以DBUtils包为例:

pip install DBUtils==1.3

输出:Requirement already satisfied: DBUtils==1.3 in ./venv/lib/python3.9/site-packages (1.3)

复制上面的路径,然后在terminal终端执行下面这条命令,把加粗标记的路径改成你刚才复制的路径就好。这条命令即可将刚才的包路径添加到环境变量中。

export PYTHONPATH= ./venv/lib/python3.9/site-packages:$PYTHONPATH

无论是否在虚拟环境中,这样的解决方式都可以生效。

再次执行程序,应该不会报包找不到的问题了。

如果仍然不行,那么指定pip -V命令,查看输出结果中的"/pip"之前路径是否和刚才加入环境变量的路径一样,如果不一样,把这个路径也加入到环境变量中。

pip -V

在这里插入图片描述

其实我的pip -V输出的路径和刚才的路径是一样的,但是为了演示不一样的情况,这里假设这个路径和刚才添加的路径不一样,这里再添加一遍到环境变量。

export PYTHONPATH= /Users/lch/python_project/learn_python/venv/lib/python3.9/site-packages:$PYTHONPATH

提示: 直接在终端运行export关键字来添加环境变量的方式可以让变量立即生效,不需要source某个文件,但是这个方式只适用于当前终端,一旦当前终端关闭或在另一个终端中,则失效。如果想要长久生效,参考“Linux和Mac环境变量设置”将路径添加到环境变量文件中。

7、自建的module包所在路径不在PYTHONPATH下

适用场景: 自建的包找不到

在IDE中执行python程序,编译器会自动把当前项目的根目录加入到包查找路径中,可以理解为加到PYTHONPATH下,所以直接执行是没有问题的。但是在cmd或者terminal控制台中直接使用python相关命令来执行程序,不会自动将当前项目加入到PYTHONPATH环境变量下,如果涉及到import其他文件夹下的变量就会报类似ImportError: No module named xxx这样的错误。

解决方法是使用sys.append()命令把报警包的所在文件夹路径加入到PYTHONPATH。下面是一个 :

比如你的项目下叫做learn_python, 下面是你的项目根目录下的文件结构。

├──README.md
├──__init__.py
├──conf
│   ├── __init__.py
│   ├── offline_conf.py # 本地运行配置文件
│   └── online_conf.py  # 线上运行配置文件
└──server      # 启动服务文件夹
     ├── __init__.py
     └── launch.py

你在运行launch.py时报警conf这个module找不到,这个时候就应该通过sys.append()命令把conf所在文件夹的路径(注意是conf所在文件夹的路径,不是conf的路径),也就是 learn_python的根路径添加到PYTHONPATH中,下面是实现方案的代码。

import sys
import logging
import os
# 把当前文件所在文件夹的父文件夹路径加入到PYTHONPATH
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from conf.online_conf import *

os.path.abspath(file)获取到的是launch.py的绝对路径;os.path.dirname(os.path.abspath(file))获取到的是launch.py所在文件夹的也就是server的根路径

os.path.dirname(os.path.dirname(os.path.abspath(file)))获取到的是server所在文件夹也就是learn_python的根路径。

至此就获取到了learn_pyhton的根路径,使用sys.append()命令把路径添加到环境变量中即可。

8、不恰当的使用了相对导入

python相对导入常见问题和解决方案

最后

当你排查完了以上所有情况,发现自己都不符合,而且在网上找了很多文章也没找到解决方案,这个时候别独自挣扎了,因为你很可能是犯了一个很低级小众的错误,继续独自排查很难找到问题所在。最好让身边的同学帮你看一下,所谓当局者迷,旁观者清,可能你看了很长时间却没关注到一些比较基础且常见的设置,这时同事或者同学往往能很快看出你的问题所在。比如你可能一直以为你用的python3, 而实际上用的是python2等等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1104810.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习老徐关于写作的思考,价值很大

* 戳上方蓝字“前端队长”关注我,每日更新 大家好啊,我是Daotin。 今天分享 IDO 老徐关于写作的建议和思考, 每一条都值得好好学习。 建议收藏,有条件的打印下来,贴在电脑边,随时能看到。 多思考&#xff0…

红包场景的系统设计和实践

一、红包系统的业务场景 红包场景的业务处理流程: 包红包:需要查询用户账户金额,需要调用账户查询服务发红包:需要红包服务生成红包订单id抢红包:通过红包订单id实时生成单笔金额凭证拆红包:有两条处理主…

C++ “引用”究竟是什么?(代码实测)

C的引用是个挺好用的东西,相当于指针的另一种写法,虽然引用有一些约束,比如必须初始化而且不能修改引用目标,但确实非常大地增加了编程的清晰度和灵活性。 引用主要有这些价值: 简化指针访问,“.”比“-&g…

简单方法建立个人网站,不用编程

对于很多没有编程知识的小白来说,建立个人网站似乎是一件困难而遥远的事情。然而,现在有了一个无需编程的方法,小白也能够轻松建立自己的个人网站,让自己的才华和创意得到更好的展示! 首先,你需要登录乔拓云…

【快刊推荐】综合类EI,最新案例29天录用,国人友好!

综合类 • 快刊推荐 01 期刊简介 检索数据库:EI &Scopus &Google Scholar 版面类别:正刊 数据库收录年份:2009年 国人占比:47%,对国人友好 年发文量:20篇左右 02 接收领域 生物&#xff…

常见场景面试题-接口重试策略、二维码扫描原理、幂等性、排行榜(三)

typora-copy-images-to: imgs微信二维码扫描原理: 答:流程: 总的来说,PC 端需要进行扫码登陆的原理是通过二维码绑定移动端的身份信息以及PC端的设备信息,根据这两个信息生成 token 给 PC 端,PC 端就登陆成…

重建大师如何调用GPU?

答:会调用GPU的cuda和显存,不同处理的阶段,占用会不一样。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件,输入倾斜照片,激光点云,POS信息及像控点,输出高精度彩色网格模…

Dreamweaver2019安装教程从零基础入门到精通(非常详细附安装包)看完这一篇就够了

软件介绍 Dreamweaver简称“DW”,是一款专业的网页设计软件,集网页制作和网站管理于一身的即时检索的网页代码编辑器,利用对 HTML、CSS、JavaScript 等内容的支持,设计人员和开发人员可以在几乎任何地方快速制作并发布网页。借助…

Vue小案例(一)

目录 案例一:点击按钮切换图片 案例二:书架 案例三:成绩表 案例一:点击按钮切换图片 现在有5张图片,我想通过点击上一张 / 下一张的按钮来进行图片切换。 使用:v-bind、v-on、v-show 1、首先创建好Vu…

使用FreeMarker导出word文档(支持循环导出实时多张图片)

续上一期的更新内容 ,导出的是单张图片,直接在路径的src 里面填写对应的占位符,就可以了,随着需求的变化,那么今天我们继续往下写一个循环导出多张图片到word里面。 使用FreeMarker导出word文档(支持导出单张图片) …

如何评估大语言模型是否可信?这里总结了七大维度

源自:机器之心发布 作者:刘扬,Kevin Yao 实际部署中,如何 “对齐”(alignment)大型语言模型(LLM,Large Language Model),即让模型行为与人类意图相一致…

荣耀推送服务业务介绍

概述 荣耀推送服务(HONOR Push)是荣耀公司向开发者提供的消息推送服务,通过服务端与客户端建立一条稳定、可靠的长连接通道,向荣耀手机系统上的APP应用客户端实时推送消息的服务。无论应用进程是否存在,均可正常收到消…

【AIFEM案例教程】水轮机活动导叶强度分析

AIFEM是由天洑自主研发的一款通用的智能结构仿真软件,助力用户解决固体结构相关的静力学、动力学、振动、热力学等实际工程问题,软件提供高效的前后处理工具和高精度的有限元求解器,帮助用户快速、深入地评估结构的力学性能,加速产…

LAS Spark+云原生:数据分析全新解决方案

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 随着数据规模的迅速增长和数据处理需求的不断演进,云原生架构和湖仓分析成为了现代数据处理的重要趋势。在这个数字化时代,企业面临着海量数…

leetcode:101.对称二叉树

借用二叉树是否相同的代码改动左右孩子相等对应关系,即为是否对称。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/bool isSameTree(struct TreeNode* p, struct Tr…

纳米软件科普|什么是运放芯片?运放芯片测试方法是什么?

运放芯片是一种电路元件,它可以用于信号放大、滤波、积分、微分等电路中。在多媒体音箱领域,运放芯片主要负责音量、音调和周边效果调节的运算功能。例如,音响中的前级和耳机放大器(耳放)中都会使用集成运算放大器。常见的运放芯片有OPA1612和…

nvm 安装 node 安装不上 npm

遇到一个问题 nvm install 18.18.2 node -v 安装上了 npm -v 发现没有安装上 解决办法 nvm -v 查看到自己的 nvm 版本号是 1.1.7 NVM下载 - NVM中文网 下载最新版本的 nvm .exe 文件 nvm list 查看手里 node 的所有版本 nvm uninstall 各个版本只保留一个最低版本 点…

中文编程开发语言工具编程案例:计时计费管理系统软件连接灯控器编程案例

中文编程开发语言工具编程案例:计时计费管理系统软件连接灯控器编程案例 中文编程开发语言工具编程案例:计时计费管理系统软件连接灯控器编程案例 中文编程系统化教程,不需英语基础。学习链接 https://edu.csdn.net/course/detail/39036

Messari发布Moonbeam简报,每日交易量稳步增长,首次公布利润数据

区块链数据公司Messari首次发布Moonbeam项目分析简报,从项目市值、链上数据表现、质押以及Moonbeam的技术优势XCM使用量等角度全面分析。这个再熊市初期上线的项目一直在默默开发,并在跨链互操作领域拥有了相当的实操成绩。我们翻译了Messari简报中的部分…

分类预测 | Matlab实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆神经网络的数据多输入分类预测

分类预测 | Matlab实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆神经网络的数据多输入分类预测 目录 分类预测 | Matlab实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆神经网络的数据多输入分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现WOA-BiLSTM鲸鱼算法…