之前從來沒想到我會在安裝Python這點上卡住,事實上最近就是在一個CentOS測試機上安裝Python時遇到了問題,因此記一下。
以往我們使用yum安裝python時非常簡單:
yum install python or yum install python3
最多額外再加裝個pip以及python-devel,就算需要某個特定的、yum無法覆蓋的小版本,也只需要`configure && make && make install`就完事,畢竟其依賴與預設的python基本相似。
然而隨著python版本的快速更迭,老舊的CentOS6、7系統自帶的yum源已經無法覆蓋新的python版本,其上許多依賴也已過時,這就需要我們手動編譯安裝python。
1、openssl的問題
ssl是python的核心模組依賴之一,pip工具、安全加密等功能依賴於此。
在CentOs6、7安裝Python高版本時,所需的openssl版本高於系統預設的openssl 1.0.2k,因此我們需要到 https://github.com/openssl/openssl/tags 下載對應的openssl安裝包,解壓後進行編譯安裝:
cd openssl-1.1.1w ./config --prefix=/usr/local/openssl make make install ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl # 覆蓋原先的openssl(也可以先備份下原先的openssl指令),無需擔心yum/ssh等工具失效,這些工具使用的是/usr/lib64中的.so庫,不是這個openssl指令 echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/openssl/lib">>/etc/profile openssl version # 驗證新的openssl版本
需要特別注意的是:openssl建議使用--prefix的方式進行config,即在/usr/local目錄下使用單獨的子目錄進行安裝,否則python make時可能無法識別使用(或許需要指定--with-openssl=/usr/local)。
2、readline/zlib等等依賴缺失怎麼辦?
除了比較重要的ssl之外,還會有一些Python標準庫可能因為依賴缺失而在make時報出missing警告,雖然這樣make出來的python也能用但遇到需要使用這些特定包時就會有問題,因此提前安裝有必要。
具體需要安裝哪些包需要根據make的結果來看,可以先按下述語句安裝一下,然後根據make結果再安裝其他缺失的依賴。
yum -y groupinstall "Development Tools" yum -y install bzip2-devel gdbm-devel xz-devel readline-devel ncurses-devel tk-devel libuuid-devel libffi-devel
最後進行python編譯安裝:
https://www.python.org/downloads/ 下載所需Python版本。
解壓後執行如下操作:
cd Python-3.12.4 ./configure --prefix=/usr/local/python3.12 --with-openssl=/usr/local/openssl # 加prefix的作用是把python安裝到/usr/local/python3.12目錄下而非預設的/usr/local目錄下,類似於解壓到當前目錄和解壓到指定目錄的區別,不過預設的/usr/local下組織的也很合理,因此不加也行 # 指定--prefix後,python的bin,lib等目錄等會全部集中在/usr/local/python3.12目錄下,未指定時則直接位於/usr/local目錄下 # --with-openssl建議加上,這個引數指定的是openssl的安裝根目錄,在使用非預設ssl元件時很有用 make make install ln -s /usr/local/python3.12/bin/python3.12 /usr/bin/python3