自定义python文件import导入ModuleNotFoundError: No module named ‘***‘ 问题
自定义python文件import导入ModuleNotFoundError: No module named ‘***’ 问题
- 错误代码:
import configparser
import os.path
import sys
from bin import swk_mysql_create, swk_redis_create
这里导入自定义python文件,其中
swk_mysql_create.py
文件的import内容是这样的import swk_reuse
在执行文件时,报错:
Traceback (most recent call last):File "/main.py", line 10, in <module>from bin import swk_mysql_create, swk_redis_createFile "/bin/swk_mysql_create.py", line 4, in <module>import swk_reuse
ModuleNotFoundError: No module named 'swk_reuse'
- 解决方法
import configparser
import os.path
import sys
# 提前设置引用路径
sys.path.append('./bin/')from bin import swk_mysql_create, swk_redis_create
- 原理
当在Python代码中执行导入操作时,Python解释器会尝试从一系列预定义的目录中查找对应的模块文件。
报错
ModuleNotFoundError: No module named 'swk_reuse'
表示解释器在查找模块时未能找到名为swk_reuse
的模块。这个问题通常是因为解释器无法定位到正确的模块文件。解决这个问题的原理涉及到Python解释器如何查找和加载模块的过程:
- 模块搜索路径(Module Search Path): Python解释器在导入模块时会按照一定的顺序搜索模块搜索路径中的目录。搜索路径包括:
- 当前脚本所在的目录(如果是从脚本中导入的)
- 内置模块的安装目录
- 第三方模块的安装目录
- 用户自定义的模块目录
sys.path
:sys.path
是一个Python列表,包含模块搜索路径。通过将自定义的模块目录添加到sys.path
中,从而告诉Python解释器在这些目录中查找模块文件。
此次解决方法,就是通过将
sys.path.append('./bin/')
添加到代码中,将./bin/
目录添加到模块搜索路径中。这样,当swk_mysql_create.py
导入swk_reuse
时,解释器会在./bin/
目录中查找相应的模块文件。这样确保了解释器能够找到正确的模块文件,从而解决了ModuleNotFoundError
错误。需要注意的是,添加搜索路径要写在导入方法的前面,否则在导入时还没有设置搜索路径,代码一样会报错。