python 編譯安裝
先升級openssl
# 1. 查看當(dāng)前openssl的版本信息
openssl version #1.0.2 需要升級
# 2. 安裝對應(yīng)的依賴庫
sudo yum -y groupinstall "Development tools"
sudo yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gdbm-devel db4-devel libpcap-devel xz-devel make
sudo yum install zlib* -y
sudo yum install -y gcc gcc-c++ python-devel wget
sudo yum install -y zlib zlib-dev openssl-devel sqlite-devel bzip2-devel libffi libffi-devel gcc gcc-c++
# 3. 下載openssl安裝文件
mkdir /tmp/softwarebak
cd /tmp/softwarebak
wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz
# 4. 解壓安裝openssl,并進入openssl的目錄
tar -zxvf openssl-1.1.1.k.tar.gz
cd openssl-1.1.1.k
export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN.UTF-8
./config --prefix=/usr/local/openssl shared zlib
sudo make && make install
# 5. 備份當(dāng)前openssl
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
# 6. 配置使用新版本
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
# 7. 更新動態(tài)鏈接庫數(shù)據(jù)并重新加載
echo /usr/local/openssl/lib >> /etc/ld.so.conf
ldconfig -v
# 8. 查看是否升級成功
openssl version
# 9. 如果缺少libssl.s0.1.1
ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
-
檢查gcc是否安裝 ,如果沒有安裝執(zhí)行
yum -y install gcc gcc-c++ autoconf make虛擬機默認(rèn)實驗sudo yum -y python3是會報錯的,因為的庫沒有。所以我們可以安裝epel擴展軟件包sudo yum -y install epel-release本文用編譯安裝所以這里用不上
[root@hadoop100 bin]# gcc --version
bash: gcc: command not found...
上面可以看出沒有安裝,所以必須安裝gcc
sudo yum -y groupinstall "Development Tools"
sudo yum -y install gcc gcc-c++ autoconf make
查看上面的安裝
yum grouplist
yum grouplist |grep Development
yum groupinfo Development Tools
安裝完畢檢查下是否安裝成功:gcc --version

- 安裝依賴包,接下來的操作我們用adeng用戶去執(zhí)行操作。
安裝如下依賴包,復(fù)制在xshell上面,shift +insert 粘貼并回車
sudo yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gdbm-devel db4-devel libpcap-devel xz-devel make
- 安裝python3,.安裝python3源碼包,python3.10.4系統(tǒng),mkdir /tmp/softwarebak, cd進入
wget https://www.python.org/ftp/python/3.10.4/Python-3.10.4.tgz
[adeng@hadoop100 tmp]$ mkdir /tmp/softwarebak
[adeng@hadoop100 tmp]$ cd /tmp/softwarebak/
[adeng@hadoop100 softwarebak]$ wget https://www.python.org/ftp/python/3.10.4/Python-3.10.4.tgz
- 解壓
sudo tar -zxvf Python-3.10.4.tgz 解壓在當(dāng)前softwarebak目錄
如果是老手,可以直接跳到下面這一處 修改 vim /tmp/softwarebak/Python-3.10.4/Modules/Setup ,然后在回到下一步繼續(xù)。
# 進入源碼目錄
cd Python-3.10.4
#指定編譯語言
export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN.UTF-8
#指定安裝目錄
sudo ./configure --prefix=/usr/local/python3 --with-ssl=/usr/local/openssl
或(主要看/usr/local/openssl是否存在)
#第一個指定安裝的路徑,不指定的話,安裝過程中可能軟件所需要的文件復(fù)制到其他不同目錄,刪除軟件很不方便,復(fù)制軟件也不方便.
#第二個是為了安裝pip需要用到ssl,后面報錯會有提到.
./configure --prefix=/usr/local/python3 --with-ssl # 上面同樣的效果,推薦使用上面一行命名
#編譯安裝
sudo make && sudo make install && sudo make clean
安裝完python后,切換到安裝的bin目錄
cd /usr/local/python3/bin
./python
import ssl # 發(fā)現(xiàn) ModuleNotFoundError: No module named '_ssl'
exit() #退出python3解釋器后執(zhí)行查看./pip3 list
./pip3 list
WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping
如何解決上面的問題
python2
import ssl # python2能正常導(dǎo)入
exit()
openssl version # OpenSSL 1.1.1
1):在Python3.7之后的版本,依賴的openssl,必須要是1.1或者1.0.2之后的版本,或者安裝了2.6.4之后的libressl,linux自帶的openssl版本過低。
2):在編譯之后修改Modules/Setup文件中的部分內(nèi)容,打開ssl,或者在編譯的時候指定–with-ssl參數(shù)(我使用的是前面的方式,后一種方式的真實性有待考究)
修改 vim /tmp/softwarebak/Python-3.10.4/Modules/Setup
shift+g 跳轉(zhuǎn)到末尾 然后在末尾粘貼如下內(nèi)容,wq保存退出
_socket socketmodule.c
# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
SSL=/usr/local/openssl
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
或者如下,最好是有用上面那種粘貼,我是沒出錯的。
cat >> /tmp/softwarebak/Python-3.10.4/Modules/Setup <<EOF
_socket socketmodule.c
# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
SSL=/usr/local/openssl
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
EOF
# 復(fù)制執(zhí)行過后去vim打開 看看格式是不是和粘貼的一樣 不是的話需要手動改一下,防止安裝不上
接著如下操作
#進入源碼目錄
cd /tmp/softwarebak/Python-3.10.4
#指定編譯語言
export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN.UTF-8
#指定安裝目錄
sudo ./configure --prefix=/usr/local/python3 --with-ssl=/usr/local/openssl
#編譯安裝
sudo make && sudo make install && sudo make clean
-
配置環(huán)境變量
#編輯/etc/profile,在尾部添加如下代碼: echo 'export PATH=$PATH:/usr/local/python3/bin' >> /etc/profile #使用source命令重新加載/etc/profile source /etc/profile #查看安裝的python版本 python3 --version # 或者如下 echo "export PATH=/usr/local/python/bin:$PATH">> ~/.bash_profile source ~/.bash_profile ~/.bash_profile 只表示當(dāng)前用戶的個人設(shè)置,生效后只該用戶可用
-
將 python 進行軟連接,將 python 和 pip 設(shè)置全局變量
sudo ln -s /usr/local/python3/bin/python3.10 /usr/bin/python3 sudo ln -s /usr/local/python3/bin/pip3.10 /usr/bin/pip3
升級pip3
注意是使用“pip3”去升級。
/usr/local/python3/bin/python3.10 -m pip install --upgrade pip -i https://pypi.douban.com/simple
或
pip3 install --upgrade pip -i https://pypi.douban.com/simple
升級pip過后目錄會多出來一個pip,也可以做一下軟鏈接也可以不用。我虛擬機/usr/bin下面并沒有pip,上面我軟鏈接了一個pip3以后就用這個.
-
測試python3 pip3是否成功
python3 --version pip3 list
設(shè)置pip源
第一種:一般用戶
mkdir ~/.pip
vim ~/.pip/pip.conf
# 添加如下內(nèi)容
[global]
trusted-host = mirrors.aliyun.com
index-url = http://mirrors.aliyun.com/pypi/simple/
[list]
format=columns
第2種:全局可使用/etc/pip.conf
cat > /etc/pip.conf << EOF
[global]
trusted-host = mirrors.aliyun.com
index-url = http://mirrors.aliyun.com/pypi/simple/
[list]
format=columns
EOF
-
有可能會引起 yum 命令不能用,因為python3 安裝,導(dǎo)致系統(tǒng) python2 沖突,得讓 python3 和python2 共存
sudo vim /usr/bin/yum sudo vim /usr/libexec/urlgrabber-ext-down 把文件里面的#!/usr/bin/python 也修改為#! /usr/bin/python2
install_openssl.sh
# !/usr/bash
echo "zheng zai anzhuang yilai"
sudo -S yum -y groupinstall "Development tools" <<EOF
123456
EOF
sudo yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gdbm-devel db4-devel libpcap-devel xz-devel make
sudo yum install zlib* -y
sudo yum install -y gcc gcc-c++ python-devel wget
sudo yum install -y zlib zlib-dev openssl-devel sqlite-devel bzip2-devel libffi libffi-devel gcc gcc-c++
sudo make && sudo make install
# 3. 下載openssl安裝文件
cd /tmp/softwarebak
sudo wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz
# 4. 解壓安裝openssl,并進入openssl的目錄
sudo tar -zxvf openssl-1.1.1k.tar.gz
sudo cd openssl-1.1.1k
export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN.UTF-8
sudo ./config --prefix=/usr/local/openssl shared zlib
sudo make && sudo make install
sudo make clean
# 5. 備份當(dāng)前openssl
sudo mv /usr/bin/openssl /usr/bin/openssl.bak
sudo mv /usr/include/openssl /usr/include/openssl.bak
# 6. 配置使用新版本
sudo ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
sudo ln -s /usr/local/openssl/include/openssl /usr/include/openssl
# 7. 更新動態(tài)鏈接庫數(shù)據(jù)并重新加載
sudo echo /usr/local/openssl/lib >> /etc/ld.so.conf
sudo ldconfig -v
# 8. 查看是否升級成功
sudo openssl version
# 9. 如果缺少libssl.s0.1.1
sudo ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
sudo ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
參考文獻
https://cloud.tencent.com/developer/article/1754597
https://blog.csdn.net/qq_41580613/article/details/119382214