作为新手经常遇到ImportError: No module named 'XXX'这个错误,有时候甚至一段代码在终端能跑,在sublimeText就会报这个错,或者在终端能跑,systemd启动就不行的问题。这个错误就是找不到XXX模块,引起这个错误原因很多,下面来解析一下。
1,没安装
如果没安装的话,确实会找不到。这时候你需要用命令
pip3 show XXX
来确认你是否已经安装了该模块,没安装的用以下命令安装
sudo pip3 install XXX
2,执行Python的版本
确认自己用相应的python版本来执行相应的module,想知道自己编译器或者终端默认执行的python版本,可以通过以下代码打印出来。
import sys
print(sys.executable)
保持安装与执行的python版本的一致性。
3,模块加载的路径
当import一个模块的时候(例如redis),解析器先从内置模块里面寻找,内置模块没有redis,那就去sys.path里面提供的路径数组里面查找,我们可以将sys.path打印出来看看包含哪些路径。
import sys
print(sys.path)
其中第一个是你当前python脚本的路径。如果你要import的module的路径并没有出现在sys.path的数组里面,那么必然会出现ImportError。解决办法有三个:
1,当你在编译器的时候,可以直接用以下代码,将模块路径临时添加进sys.path
import sys
sys.path.append("你的模块路径")
2,在终端的时候可以用以下代码临时加进去
export PYTHONPATH=$PYTHONPATH:"你的模块路径"
以上两个方法都是临时的,第二个方法只要关闭终端,sys.path就会还原
3, 在当前sitepackages里面添加.path文件
首先在编译器或者终端里找出当前的sitepackages
import site
print(site.getsitepackages())
然后在此路径下创建一个.path文件,文件名随意,.path文件内容为,你要添加的module的路径。
以上就是解决ImportError: No module named 'XXX'的方法总结。