Python 导入模块的三种方式ModuleNotFoundError: No module named '模块名'
- 问题
- 一、Python解释器查找模块文件的过程。
- 二、解决方法
- 记录一下
大家可以参考这个文档的解释很清楚:python导入模块的三种方式超详细http://c.biancheng.net/view/4645.html
问题
写程序import 我们写好的模块的时候经常会遇到ModuleNotFoundError: No module named ‘模块名’。
这个是因为python找不到相应的模块名。
一、Python解释器查找模块文件的过程。
当我们import导入模块时,Python会按照以下顺序查找指定的模块文件。
- 寻找当前目录,也就是当前执行的程序文件所在的目录下查找。
- 如果上一步没有查找到,到环境变量下的每个目录中目录;
- 到python默认的安装目录下查找
这些都会保存到模块sys的sys.path变量中,我们需要保证我们要导入的文件的模块存储到sys.path中,如果没有的话就会报错ModuleNotFoundError: No module named ‘模块名’。
二、解决方法
- 临时向sys.path中添加我们所写的模块文件的完整路径,放在文件中的第一行,但是这种方法只是临时的,关闭窗口之后就会失效。
import sys
sys.path.append("文件的完整路径")
图片中红色的就是我们添加进入的路径
- 将模块放在sys.path变量中已包含的模块加载路径中;注释部分都是python的默认模块的加载路径,我们可以将我们所用的保存到这些默认路径中,可以让所有程序共享。
将我们的文件放到lib\site-packages路径下,就相当于扩展了一个模块。
/*
['', 'D:\\Anaconda3\\python37.zip', 'D:\\Anaconda3\\DLLs','D:\\Anaconda3\\lib', 'D:\\Anaconda3',
'C:\\Users\\Jane\\AppData\\Roaming\\Python\\Python37\\site-packages','D:\\Anaconda3\\lib\\site-packages',
'D:\\Anaconda3\\lib\\site-packages\\win32',
'D:\\Anaconda3\\lib\\site-packages\\win32\\lib',
'D:\\Anaconda3\\lib\\site-packages\\Pythonwin'
*/
- 设置path系统环境变量
直接将路径配置到环境变量里面去,python解释器就会按照path的路径来进行搜索,找到指定的模块,如果没找到就会报ModuleNotFoundError 异常。
添加到环境变量中的用户变量中去,仅对当前登录用户有效即可。
对于变量值的学习解释:
.;d:\python_ module 以分号分隔为两个路径
第一个路径(.)只有一个点,表示当前路径,当运行Python程序时,Python将可以从当前路径中来读取模块
第二个路径为(d:\python_ module),表示当运行Python程序时,python可以从d:\python_ module中加载模块。
记录一下
对于普通用户来说,设置用户path变量和系统变量path变量的效果是一样的,Python在使用path变量时,会先按照系统path变量的路径去查找,然后在按照用户变量的路径去查找。