Centos7.9安装python3.10

python 编译安装

先升级openssl

# 1. 查看当前openssl的版本信息
openssl version #1.0.2 需要升级

# 2. 安装对应的依赖库
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. 备份当前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. 更新动态链接库数据并重新加载
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是否安装 ,如果没有安装执行yum -y install gcc gcc-c++ autoconf make

    虚拟机默认实验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用户去执行操作。

安装如下依赖包,复制在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系统,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 解压在当前softwarebak目录

如果是老手,可以直接跳到下面这一处 修改 vim /tmp/softwarebak/Python-3.10.4/Modules/Setup ,然后在回到下一步继续。

# 进入源码目录
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是否存在)
#第一个指定安装的路径,不指定的话,安装过程中可能软件所需要的文件复制到其他不同目录,删除软件很不方便,复制软件也不方便.

#第二个是为了安装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 # 发现 ModuleNotFoundError: No module named '_ssl'
exit()   #退出python3解释器后执行查看./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能正常导入
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文件中的部分内容,打开ssl,或者在编译的时候指定–with-ssl参数(我使用的是前面的方式,后一种方式的真实性有待考究)

修改 vim /tmp/softwarebak/Python-3.10.4/Modules/Setup

shift+g 跳转到末尾 然后在末尾粘贴如下内容,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
# 复制执行过后去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. 配置环境变量

    #编辑/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 只表示当前用户的个人设置,生效后只该用户可用
    
  1. 将 python 进行软连接,将 python 和 pip 设置全局变量

    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
    

设置pip源

第一种:一般用户

mkdir ~/.pip
vim ~/.pip/pip.conf
# 添加如下内容
[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 安装,导致系统 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. 备份当前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. 更新动态链接库数据并重新加载
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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,230评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,261评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,089评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,542评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,542评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,544评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,922评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,578评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,816评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,576评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,658评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,359评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,920评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,859评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,381评论 2 342

推荐阅读更多精彩内容