centos7从源码安装python

1.更换yum源

备份(官方停止维护,无所谓了),更改配置文件,清除缓存,建立缓存
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

CentOS-Base.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#

[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
baseurl=https://mirrors.ustc.edu.cn/centos-vault/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#released updates
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
baseurl=https://mirrors.ustc.edu.cn/centos-vault/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
baseurl=https://mirrors.ustc.edu.cn/centos-vault/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
baseurl=https://mirrors.ustc.edu.cn/centos-vault/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
yum clean all
yum makecache

yum install epel-release -y

2.安装gcc套件

yum install -y gcc

3.解压python源码包

官方镜像站:https://www.python.org/ftp/python/
阿里镜像站:https://mirrors.aliyun.com/python-release/
tar -zxf /opt/software -C /usr/local/src/ ; mv /usr/local/src/Python-3.9.9 /usr/local/src/python

4.安装依赖

yum install gcc libffi-devel python-devel openssl-devel

5.编译

cd /usr/local/src/python

5.1 指定安装目录

./configure --prefix=/usr/local/src/python3

5.2 编译安装

make && make install

6.添加环境变量

echo "PYTHON_HOME=/usr/local/src/python3" >> /etc/profile
echo "PATH=$PATH:$PYTHON_HOME/bin"" >> /etc/profile

7.效果图



20241224第一次追加

...如前

6.建立软链接

ls /usr/bin | grep "python"
python
python2
python2.7
python2.7-config
python2-config
python-config

6.1 删除软链接

rm -rf /usr/bin/python
rm -rf /usr/bin/python-config

6.2 建立软链接

ln -s /usr/local/src/python3/bin/python3.9 /usr/bin/python
ln -s /usr/local/src/python3/bin/python3.9-config /usr/bin/python-config

7.效果图



20241224第二次追加

...如前

7.设置别名

7.1.1

临时别名: alias python="python3"

7.1.2.1

为所有用户永久修改 echo 'alias python="python3"' >> /etc/bashrc ; source /etc/bashrc

7.1.2.2

为当前用户永久修改 echo 'alias python="python3"' >> ~/.bashrc ; source ~/.bashrc

8效果图




ps:
使用追加记录日志make install >> log.txt只有错误信息会输出到控制台,我捕捉到一个错误:
/usr/local/src/python/Modules/_ctypes/_ctypes.c:107:17: 致命错误:ffi.h:没有那个文件或目录 #include <ffi.h>,是没有安装依赖造成的
(20241224第一次追加)ps:
1.python安装目录下python3是python3.9的软链接,python3-config是python3.9-config的软链接

[root@master bin]# ll /usr/local/src/python3/bin | grep "python"
lrwxrwxrwx. 1 root root        9 1223 15:25 python3 -> python3.9
-rwxr-xr-x. 1 root root 17791904 1223 15:25 python3.9
-rwxr-xr-x. 1 root root     3099 1223 15:25 python3.9-config
lrwxrwxrwx. 1 root root       16 1223 15:25 python3-config -> python3.9-config

(20241224第二次追加)ps:
unalias python 为当前用户临时清除别名
(20250128第一次追加)ps:

1.脚本
#测试用
#for((i=0;i<2;i++));
#do
#slaves=slaver$((i + 1))
#expect << ooff
#spawn ssh root@$slaves
#expect "]#" {send "rm -rf /etc/yum.repos.d/CentOS-Base.repo  \r"}
#expect "~]#" {send "exit \r"}
#expect eof
#ooff
#done
#rm -rf /etc/yum.repos.d/CentOS-Base.repo 

#备份yum源文件
for((i=0;i<2;i++));
do
slaves=slaver$((i + 1))
expect << ooff
spawn ssh root@$slaves
expect "~]#" {send "mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup \r"}
expect "]#" {send "touch /etc/yum.repos.d/CentOS-Base.repo  \r"}
expect "~]#" {send "exit \r"}
expect eof
ooff
done
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
touch /etc/yum.repos.d/CentOS-Base.repo 

#配置yum源
echo '# CentOS-Base.repo' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '#' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '# The mirror system uses the connecting IP address of the client and the' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '# update status of each mirror to pick mirrors that are updated to and' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '# geographically close to the client.  You should use this for CentOS updates' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '# unless you are manually picking other mirrors.' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '#' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '# If the mirrorlist= does not work for you, as a fall back you can try the' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '# remarked out baseurl= line instead.' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '#' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '#' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '[base]' >>/etc/yum.repos.d/CentOS-Base.repo 
echo 'name=CentOS-$releasever - Base' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra' >>/etc/yum.repos.d/CentOS-Base.repo 
echo 'baseurl=https://mirrors.ustc.edu.cn/centos-vault/centos/$releasever/os/$basearch/' >>/etc/yum.repos.d/CentOS-Base.repo 
echo 'gpgcheck=1' >>/etc/yum.repos.d/CentOS-Base.repo 
echo 'gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '#released updates' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '[updates]' >>/etc/yum.repos.d/CentOS-Base.repo 
echo 'name=CentOS-$releasever - Updates' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra' >>/etc/yum.repos.d/CentOS-Base.repo 
echo 'baseurl=https://mirrors.ustc.edu.cn/centos-vault/centos/$releasever/updates/$basearch/' >>/etc/yum.repos.d/CentOS-Base.repo 
echo 'gpgcheck=1' >>/etc/yum.repos.d/CentOS-Base.repo 
echo 'gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '#additional packages that may be useful' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '[extras]' >>/etc/yum.repos.d/CentOS-Base.repo 
echo 'name=CentOS-$releasever - Extras' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra' >>/etc/yum.repos.d/CentOS-Base.repo 
echo 'baseurl=https://mirrors.ustc.edu.cn/centos-vault/centos/$releasever/extras/$basearch/' >>/etc/yum.repos.d/CentOS-Base.repo 
echo 'gpgcheck=1' >>/etc/yum.repos.d/CentOS-Base.repo 
echo 'gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '#additional packages that extend functionality of existing packages' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '[centosplus]' >>/etc/yum.repos.d/CentOS-Base.repo 
echo 'name=CentOS-$releasever - Plus' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra' >>/etc/yum.repos.d/CentOS-Base.repo 
echo 'baseurl=https://mirrors.ustc.edu.cn/centos-vault/centos/$releasever/centosplus/$basearch/' >>/etc/yum.repos.d/CentOS-Base.repo 
echo 'gpgcheck=1' >>/etc/yum.repos.d/CentOS-Base.repo 
echo 'enabled=0' >>/etc/yum.repos.d/CentOS-Base.repo 
echo 'gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '' >>/etc/yum.repos.d/CentOS-Base.repo 
echo '' >>/etc/yum.repos.d/CentOS-Base.repo 

#分发
for ((i=0;i<2;i++));
do
set timeout 60
slaves=slaver$((i+1))
script -q -c "scp -r /etc/yum.repos.d/CentOS-Base.repo  root@$slaves:/etc/yum.repos.d/CentOS-Base.repo" > ./scp.txt
done
#添加yum缓存
yum clean all 
yum makecache
yum install epel-release -y
for((i=0;i<2;i++));
do
slaves=slaver$((i + 1))
expect << ooff
spawn ssh root@$slaves
expect "~]#" {send "yum clean all \r"}
expect "~]#" {send "yum makecache \r"}
expect "]#" {send "yum install epel-release -y  \r"}
expect "~]#" {send "exit \r"}
expect eof
ooff
done

#测试用
#rm -rf /usr/local/src/python
#rm -rf /opt/software/Python-3.9.9.tgz

#编译python源码
#下载gcc
#下载源码
#解压源码
#下载依赖
#设置安装路径
#编译安装
yum install -y gcc
curl https://mirrors.aliyun.com/python-release/source/Python-3.9.9.tgz -o /opt/software/Python-3.9.9.tgz
tar -zxf /opt/software/Python-* -C /usr/local/src/ ; mv /usr/local/src/Python-3.9.9 /usr/local/src/python
yum install -y  gcc libffi-devel python-devel openssl-devel
cd /usr/local/src/python
./configure --prefix=/usr/local/src/python3
make && make install
cd 


#测试用
#sed -i '/^export PYTHON_HOME=.*/d' /etc/profile
#sed -i '/^export PATH=$PATH:$PYTHON_HOME.*/d' /etc/profile
#添加全局环境
echo 'export PYTHON_HOME=/usr/local/src/python3' >> /etc/profile
echo 'export PATH=$PATH:$PYTHON_HOME/bin' >> /etc/profile

#分发
for ((i=0;i<2;i++));
do
set timeout 60
slaves=slaver$((i+1))
script -q -c "scp -r /usr/local/src/python3 root@$slaves:/usr/local/src/" > ./scp.txt
script -q -c "scp -r /etc/profile root@$slaves:/etc/profile" > ./scp.txt
done


#测试用
#rm -rf /usr/bin/python3.9
#rm -rf /usr/bin/python3
#rm -rf /usr/bin/python
#rm -rf /usr/bin/python3.9-config
#rm -rf /usr/bin/python3-config
#rm -rf /usr/bin/python-config
#for((i=0;i<2;i++));
#do
#slaves=slaver$((i + 1))
#expect <<ooff
#set timeout 60
#spawn ssh root@$slaves
#expect "~]#" {send "rm -rf /usr/bin/python \r"}
#expect "~]#" {send "rm -rf /usr/bin/python-config \r"}
#expect "~]#" {send "rm -rf /usr/bin/python3.9 \r"}
#expect "~]#" {send "rm -rf /usr/bin/python3 \r"}
#expect "~]#" {send "rm -rf /usr/bin/python \r"}
#expect "~]#" {send "rm -rf /usr/bin/python-config \r"}
#expect "~]#" {send "rm -rf /usr/bin/python3-config \r"}
#expect "~]#" {send "rm -rf /usr/bin/python-config \r"}
#expect "~]#" {send "exit \r"}
#expect eof
#ooff
#done
#建立软链接
rm -rf /usr/bin/python
rm -rf /usr/bin/python-config
ln -s /usr/local/src/python3/bin/python3.9 /usr/bin/python3.9
ln -s /usr/bin/python3.9 /usr/bin/python3
ln -s /usr/bin/python3 /usr/bin/python
ln -s /usr/local/src/python3/bin/python3.9-config /usr/bin/python3.9-config
ln -s /usr/bin/python3.9-config /usr/bin/python3-config
ln -s /usr/bin/python3-config /usr/bin/python-config
for((i=0;i<2;i++));
do
slaves=slaver$((i + 1))
expect <<ooff
set timeout 60
spawn ssh root@$slaves
expect "~]#" {send "rm -rf /usr/bin/python \r"}
expect "~]#" {send "rm -rf /usr/bin/python-config \r"}
expect "~]#" {send "ln -s /usr/local/src/python3/bin/python3.9 /usr/bin/python3.9 \r"}
expect "~]#" {send "ln -s /usr/bin/python3.9 /usr/bin/python3 \r"}
expect "~]#" {send "ln -s /usr/bin/python3 /usr/bin/python \r"}
expect "~]#" {send "ln -s /usr/local/src/python3/bin/python3.9-config /usr/bin/python3.9-config \r"}
expect "~]#" {send "ln -s /usr/bin/python3.9-config /usr/bin/python3-config \r"}
expect "~]#" {send "ln -s /usr/bin/python3-config /usr/bin/python-config \r"}
expect "~]#" {send "exit \r"}
expect eof
ooff
done





20250202第一次追加:
centos7从源码安装python--问题--yum报错
链接:
中科大CentOS-Base.repo

posted @   基础狗  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示