python3中SSLError錯誤處理
在deepin中安裝了python3.6,安裝路徑為/usr/local/python36,然後通過deepin自帶的python2.7的pip安裝了virtualenv:
sudo pip install virtualenv
創建python3.6的虛環境:
virtualenv -p /usr/local/python36/bin/python3 .venv/python36
切換到python36虛環境:
. /home/yanwei/.venv/python36/bin/activate
執行pip安裝一些軟件包:
sudo pip install paramiko
正常完成安裝
這個時候打開pycharm,設置好python虛環境配置,發現pycharm使用的python36的虛環境中並不存在剛安裝的paramiko模塊。一度以為通過sudo執行的pip安裝,非root用戶無權訪問。google來baidu去,都沒找到想要的答案。只到自己忽然反應過來執行如下操作:
sudo which pip
# 返回如下:
/usr/local/bin/pip
這個pip的路徑並不是我想要的/home/yanwei/.venv/python36/bin/pip
這個路徑,這是deepin默認的python2.7的pip路徑,也就是說我在開始執行sudo pip install paramiko
的時候,其實是將paramiko安裝在了系統默認的python2.7下面,所以pycharm裏找不著這個模塊。
於是我執行如下操作:
sudo /home/yanwei/.venv/python36/bin/pip install paramiko
卻拋出異常如下:
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by ‘SSLError("Can‘t connect to HTTPS URL because the SSL module is not available.",)‘: /simple/pip/
具體解決方法參考如下文檔:
https://www.cnblogs.com/mlgjb/p/7976561.html
大概意思就是python3在安裝的過程中無法使用openssl,根據網上的一些博客的做法,要進入到python源碼包解壓後的那個目錄下的Modules/Setup,註意Setup這個文件,只有在python完成安裝一次之後才會生成這個文件。
將下圖中標識的四行取消註釋,然後再重新編譯即可:
執行編譯安裝:
sudo make
sudo make install
另外,還需要保證系統安裝好了openssl及openssl的開發庫:
sudo apt install openssl libssl-dev
至此,重新執行sudo /home/yanwei/.venv/python36/bin/pip install paramiko
,然後在pycharm中查看paramiko模塊是否安裝,這個時候已經恢復正常。
python3中SSLError錯誤處理