前提是已經安裝了openssl
如果沒按裝,需要yum安裝
安裝依賴:yum install openssl-devel
問題
當我在python3虛擬環境中導入ssl模塊時報錯,報錯如下:
(py3) [root@localhost Python-3.6.3]# python3
Python 3.6.3 (default, Nov 19 2018, 14:18:18)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/python3/lib/python3.6/ssl.py", line 101, in <module>
import _ssl # if we can't import it, let the error propagate
ModuleNotFoundError: No module named '_ssl'
解決辦法如下:
1.首先進入Python-3.6.3目錄,就是你解壓后安裝python3.6的目錄文件。
\2. cd 到 Modules 目錄里,找到Setup和Setup.dist文件,將下面幾行注釋去掉。
- Setup下更改
- vim Setup (大概在51%的位置)
- Setup.dist下的更改
- vim Setup.dist (大概在50%的位置)
3.編譯安裝
cd ..
./configure --prefix=/usr/local/python3
make
make install
4.刪除舊的軟連接,創建新的軟連接(很重要)
rm -rf /usr/bin/python3
ln -s /usr/local/bin/python3.6 /usr/bin/python3
5、刪除之前的虛擬環境,重新創建一個新的虛擬環境,導入ssl包就ok了
# 刪除之前建議先將之前的安裝的包導出
# 進入虛擬環境
source py3/bin/activate
# 備份文件
pip freeze > requirements.txt
# 退出虛擬環境
deactivate
# 刪除虛擬環境
rm -rf py3
# 創建新的虛擬環境
virtualenv py3 -p /usr/bin/python3
# 進入到新的虛擬環境中
source py3/bin/activate
# 導入ssl包
(py3) [root@localhost /]# python
Python 3.6.3 (default, Nov 21 2018, 22:23:54)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>>
# 恢復之前的python環境
pip install -r requirements.txt
若用到uwsgi,且需要import ssl,則需要把之前uwsgi卸載,重新編譯安裝
pip3 uninstall uwsgi
sudo pip3 install uwsgi -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
# 刪除原來的軟鏈接,設置新的軟鏈接
sudo ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi