Centos7.9安装python3.10

2022-05-23  本文已影响0人  阿登20

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

上一篇下一篇

猜你喜欢

热点阅读