目录

1.安装libssl-dev

2.修改python源文件编译

3.下载openssl 源码编译后再编译python

总结:


在linux下使用python3.7 并安装virtualenv,使用virtualenv创建虚拟环境的时候,报错

ModuleNotFoundError: No module named '_ssl'

解决方法如下,

1.安装libssl-dev

确认已经安装openssl,

sudo apt-get install libssl-dev

安装完以后重新编译python,如果可以正常使用则问题解决。如果安装的时候遇到了下面这个问题,

libssl-dev : Depends: libssl1.0.0 (= 1.0.2g-1ubuntu4) but 1.0.2g-1ubuntu4.15 is to be installed

可以参考这个博主的方法,不过评论区也说了可能会有风险,这里建议下载源码进行安装,具体可以参考本文的第3部分,下载openssl,在无管理员情况下使用源代码编译安装。

2.修改python源文件编译

如果还是不能解决,则需要修改python源文件了,具体的参考博文,即找到 python安装目录下的Modules文件夹下的Setup和Setup.dist文件

python ssl 使用 cryptography python ssl module_ubuntu

将这两个文件上面加框的地方的注释去除掉,两个文件的处理方式是一样的,然后重新编译python即可。

3.下载openssl 源码编译后再编译python

在第2步的基础上,如果在编译的时候遇到下面这个问题

fatal error: openssl/rsa.h: No such file or directory

并且确认系统里已经有openssl了,但是却找不到openssl目录下的include文件夹及里面的文件,这个时候考虑下载openssl源代码自行编译(下载地址,无需积分),这里建议使用非管理员权限安装的方法

解压openssl然后 进入目录下编译安装
./config --prefix=xxx
注意这里可能会提示你需要执行这个命令
make depend
如果有上面的提示就执行,否则直接执行下面的步骤
make -j && make install

 源码编译以后,按照常规方式配置 python 即 

./configure --prefix=python_dir

然后这个时候不要make,找到Makfile文件打开这个文件,修改SSL的内容为刚才安装的openssl位置

SSL=openssl_dir

然后再make -j && make install 即可

总结:

如果可以直接安装openssl 解决问题,那是最方便的了。如果不行的话,就得修改python源码,重新编译。再不行的话就就得下载openssl源码,编译,然后再修改python源码编译。