python安装问题之“ModuleNotFoundError: No module named 'XXX'”

标签:#IDE##python# 时间:2019/02/11 11:07:50 作者:小木

手动安装编译python的时候有时候会出现“ModuleNotFoundError: No module named ‘XXX’”之类的错误,通常这种错误都是由于编译安装python的时候没有找到对应的系统库。目前这里提供两个问题的解决方案。

[TOC]

1、ImportError: No module named _ssl

这个是由于缺少openssl支持导致的结果,在编译安装python的时候没有找到 _ssl 这个包。这个解决方案是首先下载编译安装openssl,然后在python包里面配置对应的信息后编译安装python即可。解决方法如下:

1)下载openssl-1.0.2q.tar.gz,这是目前最新版,你们可以自选。

2)解压,tar -zxvf openssl-1.0.2q.tar.gz

3)切换到解压后的目录,配置,./config --prefix=/home/dufei/local/openssl --openssldir=/home/dufei/local/openssl

4)安装,make && make install

5)安装好了openssl之后就可以配置python了。、

tar xvzf Python-3.5.1.tgz
vim Modules/Setup.dist

在这个里面搜索“SSL”,3.5版本大约是203行到210行左右,然后注释掉SSL的配置

_socket socketmodule.c

# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
SSL=/home/dufei/local/openssl # 这里改成你自己的ssl安装位置
_ssl _ssl.c \
 -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
 -L$(SSL)/lib -lssl -lcrypto

接下来编译安装python即可

./configure --prefix=/home/dufei/local/python35
make
make install

参考install-python-openssl-support-tutorial

2、ModuleNotFoundError: No module named ‘_bz2’

类似的,这个错误是由于缺少bzip2这个包,步骤也是先安装配置bz2,然后配置一下即可。不过bzip2解压后没有configure执行文件,是通过make install PREFIX来指定安装位置的,安装完了之后如果不是默认位置依然要改动python的安装配置。

wget http://bzip.org/1.0.6/bzip2-1.0.6.tar.gz
tar xpzf bzip2-1.0.6.tar.gz
cd bzip2-1.0.6
make -f Makefile_libbz2_so
make
make install PREFIX=/home/dufe/local/bz2
cp libbz2.so.1.0.6 /home/dufe/local/bz2/lib # 注意libbz2.so.1.0.6在刚才解压的文件夹中,这里把这个解压的库复制到安装后的lib下

注意,如果之前采用错误的方式make过一遍bzip2-1.0.6下面的内容需要把这个文件夹删除,按照上面的步骤重新解压安装。

需要注意的是,这里python的配置不在上述python压缩文件解压后的Modules/Setup.dist中(可能也可以在这里配置,但是我没有验证),而是在编译的时候把bz2下面的包告诉python,让python去那里面搜索bz2,因此编译python的命令如下:

./configure  --prefix=/home/dufei/local/python36 CFLAGS="-I/home/dufei/local/bz2/include" LDFLAGS="-L/home/dufei/local/bz2/lib"

也就是说多了CFLAGSLDFLAGS两个参数,放的是bz2安装之后的include和lib位置(其他包的位置也可以通过这两个参数来添加)。我个人感觉两种方式应该一样可以互换,不过没有测试过。

通过上述方式编译安装后没有问题。

欢迎大家关注DataLearner官方微信,接受最新的AI技术推送