手动安装

首先要知道python的安装位置

image-20221128143344466

可以看见 Python 是安装在 /usr/bin 里面的。

我们进入安装目录 /usr/bin

输入 ll python*查看 python 的链接

image-20221128143652125

从上图我们可以看到,Python 是指向 python 2 ,而 Python 2 是指向 Python 2.7。

现在我们要安装 Python 3,应当让python 指向 python 3 ,而 Python 2 继续指向 Python 2.7,这样可以让两个版本共存。

下载 Python 3

官方的下载地址是: https://www.python.org/ftp/python/,在这里可以找到所有版本,选择所需要的tar.x 文件

使用 wget 下载

1
2
3
wget http://npm.taobao.org/mirrors/python/3.7.5/Python-3.7.5.tar.xz
# 如果这个不行就换成官方的下载地址
wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tar.xz

Linux系统中的wget是一个下载文件的工具,它用在命令行下。
默认文件下载在当前工作路径。可以设置-P参数指定文件的下载地址

这里在tmp 文件下用的淘宝镜像,选择的版本是 3.7.5 ,提高下载速度。

image-20221128144152511

解压文件

压缩文件: tar -czvf

解压文件: tar -xzvf

这里我们使用 tar -xzvf Python-3.7.5.tar.xz,笔者在这里出现了问题。

image-20221128150354725

如果出现问题,可按以下方法

1
2
3
xz -d Python-3.7.5.tar.xz

tar -xf Python-3.7.5.tar

image-20221128150527557

成功了之后,可以看见一个 Python-3.7.5 文件

image-20221128150745592

编译和安装 Python

安装编译工具(root下,一次性完成)

1
2
3
4
yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
yum install -y libffi-devel zlib1g-dev
yum install zlib* -y

创建编译目录

1
mkdir /usr/local/python3

安装 Python 3

1
2
3
cd  Python-3.7.5 
./configure --prefix=/usr/local/python3 --enable-optimizations --with-ssl
make && make install

如果没报错,那么恭喜你,安装成功了

创建链接

先将原来的链接备份

1
2
3
4
5
mv /usr/bin/python /usr/bin/python.bak

ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3

ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3

要将python命令设置为python3,可以创建一个软链接(symbolic link),这样输入python时,系统会调用python3。同样的方法也适用于pip。以下是具体步骤:

  1. 创建python的软链接指向python3

    1
    sudo ln -s /usr/local/python3/bin/python3 /usr/bin/python
  2. 如果您已经安装了pip3,同样创建一个软链接使pip指向pip3

    1
    sudo ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
  3. 确认更改:

    • 检查python版本:

      1
      python --version
    • 检查pip版本:

      1
      pip --version

设置环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash

# 尝试找到 Python 3 的路径
PYTHON3=$(which python3 2>/dev/null)

# 如果 which 命令没有找到 Python 3
if [ -z "$PYTHON3" ]; then
# 使用 find 命令查找包含 '/bin/python3' 的路径
PYTHON3=$(find / -name "python3" -path "*/bin/python3" 2>/dev/null | head -n 1)

# 如果 find 命令找到了 Python 3 的路径
if [ -n "$PYTHON3" ]; then
# 将找到的 Python 3 路径添加到 PATH 环境变量中
export PATH=$(dirname "$PYTHON3"):$PATH
echo "已将 Python 3 添加到 PATH 环境变量中。"
else
echo "在系统中没有找到 Python 3。请确保 Python 3 已安装。"
exit 1
fi
fi

# 输出 Python 3 的路径
echo "使用 Python 3 的路径为: $PYTHON3"

验证

输入python -V

输入pip -V

常看本机的Python 版本

1
python --version

脚本安装

源码包安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/bin/bash

# 设置Python版本和下载地址的变量
PYTHON_VERSION="3.7.5"
DOWNLOAD_URL="https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tar.xz"
INSTALL_DIR="/usr/local/python$PYTHON_VERSION"

# 检查用户是否为root
if [[ $EUID -ne 0 ]]; then
echo "此脚本必须以root权限运行"
exit 1
fi

# 检查Python安装位置
echo "检查Python安装位置..."
which python &>/dev/null && {
echo "Python已安装在$(which python)"
} || {
echo "Python未安装在标准路径"
}

# 下载Python
echo "下载Python $PYTHON_VERSION..."
wget -O Python-$PYTHON_VERSION.tar.xz $DOWNLOAD_URL && echo "下载成功" || {
echo "下载失败,请检查网络连接或下载地址"
exit 1
}

# 解压文件
echo "解压Python $PYTHON_VERSION..."
tar -xvf Python-$PYTHON_VERSION.tar.xz && echo "解压成功" || {
echo "解压失败,请检查文件是否完整"
exit 1
}

# 进入解压后的目录
cd Python-$PYTHON_VERSION

# 安装编译工具和依赖
echo "安装编译工具和依赖..."
yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
yum install -y libffi-devel zlib1g-dev
yum install zlib* -y

# 创建编译目录
echo "创建编译目录..."
mkdir -p $INSTALL_DIR

# 编译和安装Python
echo "编译和安装Python $PYTHON_VERSION..."
./configure --prefix=$INSTALL_DIR --enable-optimizations --with-ssl && echo "配置成功" || {
echo "配置失败,请检查依赖是否正确安装"
exit 1
}
make && make install && echo "安装成功" || {
echo "编译或安装失败,请检查编译工具是否正确安装"
exit 1
}

# 创建链接
echo "创建链接..."
mv /usr/bin/python /usr/bin/python.bak
ln -s $INSTALL_DIR/bin/python3 /usr/bin/python && echo "Python链接创建成功" || {
echo "Python链接创建失败"
exit 1
}
ln -s $INSTALL_DIR/bin/pip3 /usr/bin/pip && echo "Pip链接创建成功" || {
echo "Pip链接创建失败"
exit 1
}

# 验证安装
echo "验证安装..."
python --version && pip --version && echo "Python和Pip版本验证成功" || {
echo "验证失败,请检查链接是否创建正确"
exit 1
}

echo "Python $PYTHON_VERSION 安装完成!"

yum安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash

# 检查用户是否为root
if [[ $EUID -ne 0 ]]; then
echo "此脚本必须以root权限运行"
exit 1
fi

# 安装EPEL仓库,以便可以安装更多的更新包
echo "安装EPEL仓库..."
yum install -y epel-release

# 更新yum缓存
echo "更新yum缓存..."
yum makecache fast

# 安装Python 3
echo "安装Python 3..."
yum install -y python3

# 验证安装
echo "验证Python安装..."
python3 --version && pip3 --version && echo "Python3和Pip3安装成功。"

# 输出完成信息
echo "Python 3 安装完成!"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/bin/bash

# 设置Python版本和下载地址的变量
PYTHON_VERSION="3.7.5"
DOWNLOAD_URL="https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tar.xz"
INSTALL_DIR="/usr/local/python$PYTHON_VERSION"
PYTHON_ARCHIVE="Python-$PYTHON_VERSION.tar.xz"
PYTHON_SOURCE_DIR="Python-$PYTHON_VERSION"

# 检查用户是否为root
if [[ $EUID -ne 0 ]]; then
echo "此脚本必须以root权限运行"
exit 1
fi

# 检查Python安装位置
echo "检查Python安装位置..."
which python &>/dev/null && {
echo "Python已安装在$(which python)"
} || {
echo "Python未安装在标准路径"
}

# 下载Python
if [ ! -f $PYTHON_ARCHIVE ]; then
echo "下载Python $PYTHON_VERSION..."
wget -O $PYTHON_ARCHIVE $DOWNLOAD_URL && echo "下载成功" || {
echo "下载失败,请检查网络连接或下载地址"
exit 1
}
else
echo "Python安装包已存在,跳过下载步骤。"
fi

# 解压文件
if [ ! -d $PYTHON_SOURCE_DIR ]; then
echo "解压Python $PYTHON_VERSION..."
tar -xvf $PYTHON_ARCHIVE && echo "解压成功" || {
echo "解压失败,请检查文件是否完整"
exit 1
}
else
echo "Python源代码目录已存在,跳过解压步骤。"
fi

# 进入解压后的目录
cd $PYTHON_SOURCE_DIR

# 安装编译工具和依赖
echo "安装编译工具和依赖..."
yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
yum install -y libffi-devel zlib1g-dev
yum install zlib* -y

# 创建编译目录
echo "创建编译目录..."
mkdir -p $INSTALL_DIR

# 编译和安装Python
echo "编译和安装Python $PYTHON_VERSION..."
./configure --prefix=$INSTALL_DIR --enable-optimizations --with-ssl && echo "配置成功" || {
echo "配置失败,请检查依赖是否正确安装"
exit 1
}
make && make install && echo "安装成功" || {
echo "编译或安装失败,请检查编译工具是否正确安装"
exit 1
}

# 创建链接
echo "创建链接..."
if [ -f /usr/bin/python ]; then
mv /usr/bin/python /usr/bin/python.bak
fi
ln -sf $INSTALL_DIR/bin/python3 /usr/bin/python && echo "Python链接创建成功" || {
echo "Python链接创建失败"
exit 1
}
ln -sf $INSTALL_DIR/bin/pip3 /usr/bin/pip && echo "Pip链接创建成功" || {
echo "Pip链接创建失败"
exit 1
}

# 验证安装
echo "验证安装..."
python --version && pip --version && echo "Python和Pip版本验证成功" || {
echo "验证失败,请检查链接是否创建正确"
exit 1
}

echo "Python $PYTHON_VERSION 安装完成!"
# 输出安装包的位置,Python安装的位置和pip安装的位置
echo "安装包位置:$(pwd)/Python-$PYTHON_VERSION.tar.xz"
echo "Python安装位置:$INSTALL_DIR/bin/python3"
echo "Pip安装位置:$INSTALL_DIR/bin/pip3"

源码包卸载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/bin/bash

# 提示用户输入要卸载的Python版本
read -p "请输入要卸载的Python版本(例如3.7.5): " PYTHON_VERSION

# 定义安装目录变量
INSTALL_DIR="/usr/local/python$PYTHON_VERSION"

# 检查用户是否为root
if [[ $EUID -ne 0 ]]; then
echo "此脚本必须以root权限运行"
exit 1
fi

# 卸载Python
echo "正在卸载Python $PYTHON_VERSION..."

# 检查是否通过yum安装
if yum list installed | grep -q python$PYTHON_VERSION; then
yum remove -y python$PYTHON_VERSION
echo "已通过yum卸载Python $PYTHON_VERSION"
fi

# 检查是否通过rpm安装
if rpm -q python$PYTHON_VERSION; then
rpm -e python$PYTHON_VERSION
echo "已通过rpm卸载Python $PYTHON_VERSION"
fi

# 检查是否存在编译安装的Python目录
if [ -d "$INSTALL_DIR" ]; then
rm -rf $INSTALL_DIR
echo "已删除编译安装的Python目录 $INSTALL_DIR"
fi

# 删除软链接
if [ -L "/usr/bin/python" ]; then
rm -f /usr/bin/python
echo "已删除软链接 /usr/bin/python"
fi

if [ -L "/usr/bin/pip" ]; then
rm -f /usr/bin/pip
echo "已删除软链接 /usr/bin/pip"
fi

# 恢复原来的Python链接(如果有备份)
if [ -f "/usr/bin/python.bak" ]; then
mv /usr/bin/python.bak /usr/bin/python
echo "已恢复原来的Python链接"
fi

echo "Python $PYTHON_VERSION 卸载完成!"

YUM的处理

yum 在 CentOS 7 中默认使用 Python 2.7。Python2.7 的链接不要删除。

yum使用python2.7

  1. 备份原始的 yum 和其他相关文件

    1
    2
    cp /usr/bin/yum /usr/bin/yum.bak
    cp /usr/libexec/urlgrabber-ext-down /usr/libexec/urlgrabber-ext-down.bak
  2. 修改 /usr/bin/yum 文件: 将第一行的 #!/usr/bin/python 更改为 #!/usr/bin/python2.7,这样 yum 就会使用 Python 2.7。

    1
    sed -i 's|#!/usr/bin/python|#!/usr/bin/python2.7|' /usr/bin/yum
  3. 修改 /usr/libexec/urlgrabber-ext-down 文件: 同样,将第一行的 #!/usr/bin/python 更改为 #!/usr/bin/python2.7

    1
    sed -i 's|#!/usr/bin/python|#!/usr/bin/python2.7|' /usr/libexec/urlgrabber-ext-down
  4. 验证 yum 是否能正常工作: 运行 yum 命令来检查是否正常。

    1
    yum --version

脚本法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash

# 找到Python 2.7的路径
PYTHON2_PATH=$(find / -name "python2" -path "*/bin/python2" 2>/dev/null | head -n 1)


# 修改yum和urlgrabber-ext-down的头部指向python2
sed -i 's|#!/usr/bin/python|#!/usr/bin/python2|' /usr/bin/yum
sed -i 's|#!/usr/bin/python|#!/usr/bin/python2|' /usr/libexec/urlgrabber-ext-down

# 测试yum是否可用
if yum --version; then
echo "Yum现在可用"
else
echo "Yum仍然不可用"
exit 1
fi


还有问题将将文件的第一行#!/usr/bin/python更改为#!/usr/bin/python2,确保它指向Python 2的正确路径:

1
2
vim  /usr/bin/yum
vim /usr/libexec/urlgrabber-ext-down