Python导入模块时遇到的错误分析
发布时间 - 2026-01-11 03:01:18 点击率:次当遇到无法导入某个python模块时,可能会是没有安装某个模块,也有可能是某模块在加载过程中失败,也有可能是陷入了循环导入的问题。本文详细解释了这个问题。

1. 模块未安装或者路径不对
ImportError: No mudule named myModule
有两种可能,一是该模块没有安装,一般可以用
pip install %module_name%
来解决。注意有时候模块安装包名并不等于要导入的模块名。这种情况下可以通过pip search | list命令来尝试找到正确的包。
另一种情况就是包虽然安装了,但当前运行的程序加载的路径有错。python运行时将从以下位置尝试加载python modules:
* 当前目录
* 环境变量$PYTHONPATH所指示的值,这是一个由“:”分隔的字符串,各个子字符串都是文件系统的一个路径。
* 标准库目录,如dist-site-packages下的模块。
* 在.pth文件中指定的路径,如果存在.pth文件的话。
可以使用以下方式来查看python运行时的包含路径:
import sys print(sys.path)
在运行出错的脚本装头部加上这一段代码,然后在控制台中查看打印出来的python类库路径,检查安装包是否已包含在上述路径中。
***可以通过下面的方式将未包含在路径中的模块临时包含进来:***
sys.path.append("path/to/module")
另外,还可以在shell窗口中查看当前的python包含路径:
echo $PYTHONPATH
2. 无法导入已存在的模块
如果要导入的模块包含了native代码,并且native代码加载(初始化)失败时,就会导致这种错误。使用ssl, gevent等涉及native的模块时,如果对应的native程序并未安装,则会出现这样的错误。
另一种错误情况是,使用相对路径导入时,父模块还未导入成功。见下面的代码:
main.py mypackage/ __init__.py mymodule.py myothermodule.py
mymodule.py如下所示:
#!/usr/bin/env python3
# Exported function
def as_int(a):
return int(a)
# Test function for module
def _test():
assert as_int('1') == 1
if __name__ == '__main__':
_test()
以及myothermodule代码如下所示:
#!/usr/bin/env python3
from .mymodule import as_int
# Exported function
def add(a, b):
return as_int(a) + as_int(b)
# Test function for module
def _test():
assert add('1', '1') == 2
if __name__ == '__main__':
_test()
如果执行mypackage/myothermodule,则会报以下错误:
Traceback (most recent call last):
File "myothermodule.py", line 3, in <module>
from .mymodule import as_int
SystemError: Parent module '' not loaded, cannot perform relative import
[这篇文章](#Relative imports in Python 3)给出了更详细的解答。
3. 循环导入
这种错误称之为"circular (or cyclic) imports"。是python独有的一种导入错误,在象java这样的语言中就不存在。
假设有如下两个文件,a.py和b.py:
#a.py
print "a in"
import sys
print "b imported: %s" % ("b" in sys.modules, )
import b
print "a out"
print b.x
以及:
#b.py print "b in" import a print "b out" x = 3
执行python a.py,将得到以下结果:
$ python a.py a in b imported: False b in a in b imported: True a out Traceback (most recent call last): File "a.py", line 4, in <module> import b File "/home/shlomme/tmp/x/b.py", line 2, in <module> import a File "/home/shlomme/tmp/x/a.py", line 7, in <module> print b.x AttributeError: 'module' object has no attribute 'x'
出现这种情况的原因是产生了循环导入。循环导入,以及在导入过程中python进行了加锁操作,最终导致在模块b未导入完成时就引用了其中的名字。
判断导入错误是否是因为循环导入引起的,主要看堆栈中是否出现两次重复的导入。比如上述堆栈中a.py出现两次,因此可以判断是这个文件引起的循环导入。
要解决这个问题,可以把模块看成一种资源,对所有要引入的模块进行编号,再按静态资源排序法顺次导入,就可以避免循环导入。
# python
# 导入模块错误
# 模块导入错误
# 导入错误
# python根据路径导入模块的方法
# Python创建模块及模块导入的方法
# Python中几种导入模块的方式总结
# Python在不同目录下导入模块的实现方法
# Python3导入自定义模块的三种方法详解
# python模块导入的细节详解
# python如何导入自己的模块
# Python导入模块的3种方式超级详细讲解
# 加载
# 也有
# 两次
# 可以通过
# 所示
# 则会
# 过程中
# 没有安装
# 安装包
# 都是
# 就会
# 是因为
# 出了
# 还可以
# 一是
# 可以用
# 这个问题
# 这是一个
# 不存在
# 这种情况
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
免费网站制作appp,免费制作app哪个平台好?
大同网页,大同瑞慈医院官网?
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
如何快速搭建安全的FTP站点?
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
Laravel如何升级到最新版本?(升级指南和步骤)
使用Dockerfile构建java web环境
java中使用zxing批量生成二维码立牌
如何确保西部建站助手FTP传输的安全性?
中山网站推广排名,中山信息港登录入口?
JavaScript如何实现倒计时_时间函数如何精确控制
公司网站制作需要多少钱,找人做公司网站需要多少钱?
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
如何在阿里云虚拟服务器快速搭建网站?
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
nginx修改上传文件大小限制的方法
如何快速搭建虚拟主机网站?新手必看指南
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
如何用AWS免费套餐快速搭建高效网站?
在线教育网站制作平台,山西立德教育官网?
如何快速生成ASP一键建站模板并优化安全性?
郑州企业网站制作公司,郑州招聘网站有哪些?
简单实现Android验证码
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
北京的网站制作公司有哪些,哪个视频网站最好?
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
Laravel如何实现用户密码重置功能?(完整流程代码)
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
如何在不使用负向后查找的情况下匹配特定条件前的换行符
Android okhttputils现在进度显示实例代码
如何安全更换建站之星模板并保留数据?
如何批量查询域名的建站时间记录?
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
如何制作一个表白网站视频,关于勇敢表白的小标题?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
简历没回改:利用AI润色让你的文字更专业
Laravel如何处理和验证JSON类型的数据库字段
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)

