当前位置: 首页 > news >正文

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

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等等。

相关文章:

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

Python ModuleNotFoundError: No module named ‘xxx‘可能的解决方案大全 本文主要介绍了Python ModuleNotFoundError: No module named ‘xxx‘可能的解决方案大全,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值&#x…...

eclipse 配置selenium环境

eclipse环境 安装selenium的步骤 配置谷歌浏览器驱动 Selenium安装-如何在Java中安装Selenium chrome驱动下载 eclipse 启动配置java_home: 在eclipse.ini文件中加上一行 1 配置java环境,网上有很多教程 2 下载eclipse,网上有很多教程 ps&…...

数据挖掘(6)聚类分析

一、什么是聚类分析 1.1概述 无指导的,数据集中类别未知类的特征: 类不是事先给定的,而是根据数据的相似性、距离划分的聚类的数目和结构都没有事先假定。挖掘有价值的客户: 找到客户的黄金客户ATM的安装位置 1.2区别 二、距离和相似系数 …...

在启智平台上安装anconda

安装Anaconda3-5.0.1-Linux-x86_64.sh python版本是3.6 在下面的网站上找到要下载的anaconda版本,把对应的.sh文件下载下来 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 把sh文件压缩成.zip文件,拖到启智平台的调试页面 上传到平台上 un…...

棒球省队建设实施办法·棒球1号位

棒球省队建设实施办法 1. 建设目标与原则 提升棒球省队整体竞技水平 为了提升棒球省队整体竞技水平,我们需要采取一系列有效的措施。 首先,我们应该加强对棒球运动的投入和关注。各级政府和相关部门应加大对棒球运动的经费投入,提高球队的…...

架构案例2017(五十二)

第5题 阅读以下关于Web系统架构设计的叙述,在答题纸上回答问题1至问题3.【说明】某电子商务企业因发展良好,客户量逐步增大,企业业务不断扩充,导致其原有的B2C商品交易平台己不能满足现有业务需求。因此,该企业委托某…...

给四个点坐标计算两条直线的交点

文章目录 1 chatgpt42、文心一言3、星火4、Bard总结 我使用Chatgpt4和文心一言、科大讯飞星火、google Bard 对该问题进行搜索,分别给出答案。先说结论,是chatgpt4和文心一言给对了答案, 另外两个部分正确。 问题是:python 给定四…...

从入门到进阶 之 ElasticSearch SpringData 继承篇

🌹 以上分享 从入门到进阶 之 ElasticSearch SpringData 继承篇,如有问题请指教写。🌹🌹 如你对技术也感兴趣,欢迎交流。🌹🌹🌹 如有需要,请👍点赞&#x1f…...

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

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

YOLOv7改进:动态蛇形卷积(Dynamic Snake Convolution),增强细微特征对小目标友好,实现涨点 | ICCV2023

💡💡💡本文独家改进:动态蛇形卷积(Dynamic Snake Convolution),增强细长微弱的局部结构特征与复杂多变的全局形态特征,对小目标检测很适用 Dynamic Snake Convolution | 亲测在多个数据集能够实现大幅涨点 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.…...

从文心大模型4.0与FuncGPT:用AI为开发者打开新视界

今天,在百度2023世界大会上,文心大模型4.0正式发布,而在大洋的彼岸,因为大模型代表ChatGPT之类的AI编码工具来势汹汹,作为全世界每个开发者最爱的代码辅助网站,Stack Overflow的CEO Prashanth Chandrasekar…...

Nginx集群负载均衡配置完整流程

今天,良哥带你来做一个nginx集群的负载均衡配置的完整流程。 一、准备工作 本次搭建的操作系统环境是win11,linux可配置类同。 1)首先,下载nginx。 下载地址为:http://nginx.org/en/download.html 良哥下载的是&am…...

如何生成SSH服务器的ed25519公钥SHA256指纹

最近搭建ubuntu服务器,远程登录让确认指纹,研究一番搞懂了,记录一下。 1、putty 第一次登录服务器,出现提示: 让确认服务器指纹是否正确。 其中:箭头指向的 ed25519 :是一种非对称加密的签名方法&#xf…...

设计模式:抽象工厂模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

大家好!本节主要介绍设计模式中的抽象工厂模式。 简介: 抽象工厂模式,它是所有形态的工厂模式中最为抽象和最具一般性的一种形态。它用于处理当有多个抽象角色时的情况。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指…...

ocpp-远程启动(RemoteStartTransaction)、远程停止(RemoteStopTransaction)

目录 1、介绍 2、远程启动-RemoteStartTransaction 3、远程停止-RemoteStopTransaction 4、代码 4.1 OcppRechongFeign 4.2 CmdController 4.3 CmdService 4.4 RemoteStartTransactionReq 4.5 接收报文-DataAnalysisController 4.6 接收报文实现类-DataAnalysisServi…...

【网络安全】安全的系统配置

系统配置是网络安全的重要组成部分。一个不安全的系统配置可能会使网络暴露在攻击者面前,而一个安全的系统配置可以有效地防止攻击者的入侵。在本文中,我们将详细介绍如何配置一个安全的系统,包括操作系统配置,网络服务配置&#…...

conda使用一般步骤

Terminal:conda create --name myenv python3.7 如果环境不行的话 1.source /opt/anaconda3/bin/activate 2.可能是没有源 vim ~/.condarc将需要的源装上 conda clean -i将原先的源删除 3.然后再conda create即可 4.需要激活环境 conda activate numpy 5.pycharm配置…...

如何做好需求收集?方法和步骤

需求收集是理解你想要构建什么以及为什么要构建它的过程。需求收集通常被视为开发软件应用,或开发硬件产品的一部分。其重要性不言而喻。据调查显示50%以上产品在市场上失败的原因,是由于忽视了用户需求。 一、需求收集为什么会困难? 困扰项…...

SpringBoo整合WebSocket实战演练——Java入职十三天

前言 本文将介绍如何在Spring Boot应用程序中使用WebSocket实现服务端向客户端推送消息。Spring Boot和WebSocket的整合实现服务端向客户端推送消息,使得客户端能够实时接收并处理服务器发来的信息。WebSocket协议是一种双向通信的网络协议,使得客户端和服务器能够建立持久连…...

众佰诚:抖音小店的体验分什么时候更新

随着移动互联网的发展,越来越多的电商平台开始涌现,其中抖音小店作为一种新型的电商模式,受到了许多用户的欢迎。然而,对于抖音小店的体验分更新时间,很多用户并不是很清楚。本文将对此进行详细的解答。 首先&#xff…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)&#xff0…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层&#xf…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...