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
-
检查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
- 安装依赖包,接下来的操作我们用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
- 安装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
- 解压
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
-
配置环境变量
#编辑/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 只表示当前用户的个人设置,生效后只该用户可用
-
将 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以后就用这个.
-
测试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
-
有可能会引起 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