Python的错误导入已经安装模块问题,怎么解决

如题所述

当遇到无法导入某个python模块时,可能会是没有安装某个模块,也有可能是某模块在加载过程中失败,也有可能是陷入了循环导入的问题。本文详细解释了这个问题。
1. 模块未安装或者路径不对
ImportError: No mudule named myModule

有两种可能,一是该模块没有安装,一般可以用
pip install %module_name%

来解决。注意有时候模块安装包名并不等于要导入的模块名。这种情况下可以通过pip search | list命令来尝试找到正确的包。
另一种情况就是包虽然安装了,但当前运行的程序加载的路径有错。python运行时将从以下位置尝试加载python modules:
* 当前目录
* 环境变量$PYTHONPATH所指示的值,这是一个由“:”分隔的字符串,各个子字符串都是文件系统的一个路径。
* 标准库目录,如dist-site-packages下的模块。
* 在.pth文件中指定的路径,如果存在.pth文件的话。
可以使用以下方式来查看python运行时的包含路径:
?

12

import sysprint(sys.path)

在运行出错的脚本装头部加上这一段代码,然后在控制台中查看打印出来的python类库路径,检查安装包是否已包含在上述路径中。
***可以通过下面的方式将未包含在路径中的模块临时包含进来:***
sys.path.append("path/to/module")

另外,还可以在shell窗口中查看当前的python包含路径:
echo $PYTHONPATH
2. 无法导入已存在的模块
如果要导入的模块包含了native代码,并且native代码加载(初始化)失败时,就会导致这种错误。使用ssl,
gevent等涉及native的模块时,如果对应的native程序并未安装,则会出现这样的错误。
另一种错误情况是,使用相对路径导入时,父模块还未导入成功。见下面的代码:
?

12345

main.pymypackage/ __init__.pymymodule.pymyothermodule.py

mymodule.py如下所示:
?

123456789101112

#!/usr/bin/env python3 # Exported functiondef as_int(a): return int(a) # Test function for module def _test(): assert as_int('1') == 1 if __name__ == '__main__': _test()

以及myothermodule代码如下所示:
?

1234567891011121314

#!/usr/bin/env python3 from .mymodule import as_int # Exported functiondef 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:
?

1234567

#a.pyprint "a in"import sysprint "b imported: %s" % ("b" in sys.modules, )import bprint "a out"print b.x

以及:
?

12345

#b.pyprint "b in"import aprint "b out"x = 3

执行python a.py,将得到以下结果:
?

123456789101112131415

$ python a.pya in b imported: Falseb ina inb imported: Truea outTraceback (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 aFile "/home/shlomme/tmp/x/a.py", line 7, in <module> print b.xAttributeError: 'module' object has no attribute 'x'

出现这种情况的原因是产生了循环导入。循环导入,以及在导入过程中python进行了加锁操作,最终导致在模块b未导入完成时就引用了其中的名字。
判断导入错误是否是因为循环导入引起的,主要看堆栈中是否出现两次重复的导入。比如上述堆栈中a.py出现两次,因此可以判断是这个文件引起的循环导入。
要解决这个问题,可以把模块看成一种资源,对所有要引入的模块进行编号,再按静态资源排序法顺次导入,就可以避免循环导入。
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-11-15
直接用try-except结构进行捕获处理:
try:
from _foo import *
except ImportError:
raise ImportError('导入错误')

Python的错误导入已经安装模块问题,怎么解决
有两种可能,一是该模块没有安装,一般可以用 pip install %module_name 来解决。注意有时候模块安装包名并不等于要导入的模块名。这种情况下可以通过pip search | list命令来尝试找到正确的包。另一种情况就是包虽然安装了,但当前运行的程序加载的路径有错。python运行时将从以下位置尝试加载python modu...

如何安装python模块, python模块安装失败的原因以及解决办法
解决办法:在命令行中输入“where python”查看Python路径,确认是否安装了多个版本。若存在多个版本,卸载多余的Python环境。三、具体安装失败情况的排查与解决 常见错误包括:网络链接超时,切换到国内镜像源;缺少VC++环境,安装此环境;缺失依赖库,安装相关依赖库;pip模块版本过低,更新pip版本;模块名错误...

python3 已经安装了requests模块,还是会提示ModuleNotFoundError: No...
先把已将安装的requests模块删除 打开python3x.exe文件的安装目录 找到pip.exe文件的位置大概在Scripts文件夹里 选中上面的地址栏改为cmd回车进入dos语言界面 pip install requests 回车 就会进入安装界面 安装成功后你的问题就解决了 成功后再次pip install requests就会出现如下界面就说明成功了 ...

python导入py文件报错怎么办
1、在缺省状态下,导入一个已编写好的py文件用import 跟上py文件名,有时系统会出现SyntaxError: invalid syntax的错误:2、这种情况一般是由于查找目录不包含,类似于linux下的执行路径概念,可以打印sys.path来确认, 如下图:3、如果编写的py文件不在上述目录清单中,就可以字符串的append方法,将目录...

Python import自定义模块报错、自定义异常、字符串处理、截取
一、Python导入自定义模块报错 问题现象:在PyCharm中运行程序一切正常,但使用命令行(如cmd命令行或PyCharm的Terminal窗口)执行py文件时,会收到错误提示"No module named xxx"。问题原因:PyCharm在每次运行时,会搜索整个工程目录并将目录添加到sys.path中,这样运行时能找到对应的模块.py文件。然而,...

【问题】python中使用pip安装模块时,出现:Fatal error in launcher...
以下是解决问题的步骤:1. 使用cmd命令:where pip检查pip命令的路径,看是否存在重复路径。2. 将环境变量path复制到txt文件中,删除不必要的路径,保存文件后,重新打开控制台,再次使用pip进行安装。对于需要同时安装python2和python3的情况,可以使用以下方法来使用指定版本的pip安装模块:python2 -m pip...

如果Python 导包你还有问题,不妨看看玄学——Python 导包问题解决记录...
通过在导入语句前添加玄学的点符号“.”,即从“from learn_class import Learn”更改为“from .learn_class import Learn”,问题得到了解决。后续的错误同样源自找不到模块的困惑,解决方法与之前的类似,通过在导入语句前加入“.”,即从“from envs.AYS.AYS_Environment import *”更改为“from ....

python安装过程中出现modify(python安装成功后为什么会出现modifysetup...
安装在python上的模块,可以用pip或者执行setup.py来安装 如果你是用pip安装的,可以直接使用pipuninstall模块名 如果是用pythonsetup.pyinstall安装,使用pythonsetup.pyuninstall来卸载 怎么解决安装python时严重错误解决Python安装发生严重错误的方法和步骤 Windows为例:1、点击最左下角的徽标键,点击设置按钮...

python相对导入常见问题和解决方案
解决相对导入问题的方法包括:将相对导入改为绝对导入,当遇到"no known parent package"错误时;移动主模块或相关模块到顶层包中,避免"beyond top-level package"错误;并确保在直接运行脚本时,脚本内不包含相对导入,以避免"Parent module not loaded"错误。虽然相对导入可能导致问题,但它在包内部的...

python - 彻底解决import报错问题
相对导入:相对导入可以简化代码,但仅适用于解决特定模块间的导入问题,不适用于入口点以上的包。总结来说,避免“找不到模块”错误的步骤包括理解入口点、调整导入策略、适当使用构建工具,以及注意循环导入和模块执行的顺序问题。通过这些方法,可以有效地管理Python项目的import操作,减少报错情况。

相似回答