公司運維提供的服務器是centos6.8,打算在上面裝python3.7,結果費盡周折,按照網上的步驟python3.7能成功安裝,但是import ssl卻報找不到_ssl模塊的錯誤:
import _ssl # if we can't import it, let the error propagateImportError: No module named _ssl
在網上搜了各種方法,有說修改python3.7安裝文件中的Setup.dist,將SSL部分注釋掉,但自己注釋掉仍然不行。有說重新裝openssl庫,配置python3.7的時候指定openssl,然而也是不行。反正網上各種博客說的方法都不萬能,在我這都不行。之前安裝的時候只是把安裝步驟的linux命令敲一遍,也不明白是什么意思,為了徹底找出原因所在,自己反復折騰了2天,每條命令、每個參數選項都去搞明白到底是啥意思,最終終于把ssl這個模塊搞定了,下面就把centos6.8安裝python3.7的正確步驟寫下。另,如果沒有特殊要求,直接裝python3.6就行,python3.6在centos6.8下傻瓜式安裝就不會有此問題。
言歸正傳,安裝步驟如下:
1、安裝依賴庫:
yum install -y zlib zlib-dev openssl-devel sqlite-devel bzip2-devel libffi libffi-devel gcc gcc-c++
注意,這里yum源安裝的openssl的最高版本是1.0.1:
[root@4ed99ab56fea /]# rpm -qa | grep opensslopenssl-1.0.1e-57.el6.x86_64openssl-devel-1.0.1e-57.el6.x86_64
但是python3.7安裝要求openssl最低版本是1.0.2,所以不能用yum安裝的openssl,需要額外下載1.0.2的openssl來安裝。
2、安裝1.0.2版本的openssl
下載1.0.2版本的openssl
wget http://www.openssl.org/source/openssl-1.0.2j.tar.gz
解壓openssl源代碼,并安裝
tar -zxvf openssl-1.0.2j.tar.gz./config --prefix=$HOME/openssl shared zlibmake && make install
注意!openssl配置是用config,而不是configure,另外openssl編譯安裝依賴zlib動態庫,所以一定要shared zlib。
3、設置環境變量LD_LIBRARY_PATH
echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/openssl/lib" >> $HOME/.bash_profilesource $HOME/.bash_profile
這一步一定要有??!LD_LIBRARY_PATH環境變量主要用于指定查找共享庫(動態鏈接庫)時除了默認路徑之外的其他路徑。當執行函數動態鏈接.so時,如果此文件不在缺省目錄下‘/lib' and ‘/usr/lib',那么就需要指定環境變量LD_LIBRARY_PATH
4、解壓python3.7,并安裝,一定要指定剛才安裝的1.0.2版本的openssl?。?!
tar -zxvf Python-3.7.0.tgz./configure --prefix=$HOME/Py37 --with-openssl=$HOME/opensslmake && make install
ok,至此python3.7就安裝完了,來檢驗下ssl模塊能否被導入吧:
[root@4ed99ab56fea bin]# ./python3Python 3.7.0 (default, Sep 16 2018, 14:12:43)[GCC 4.4.7 20120313 (Red Hat 4.4.7-23)] on linuxType "help", "copyright", "credits" or "license" for more information.>>> import ssl>>> import _ssl>>>
新聞熱點
疑難解答