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 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 12月 23 15:25 python3 -> python3.9
-rwxr-xr-x. 1 root root 17791904 12月 23 15:25 python3.9
-rwxr-xr-x. 1 root root 3099 12月 23 15:25 python3.9-config
lrwxrwxrwx. 1 root root 16 12月 23 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律