Centos7.9安裝python3.10

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

  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

image.png
  1. 安裝依賴包,接下來的操作我們用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

  1. 安裝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

  1. 解壓

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
  1. 配置環(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è)置,生效后只該用戶可用
    
  1. 將 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以后就用這個.

  1. 測試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
  1. 有可能會引起 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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容