一、介绍
本文记录在 Windows、CentOS7 上的安装、卸载 Python 的过程。
当前 2025/7/5 最新版本为 3.13.5(2025/6/11 发行)
pip 版本:25.1.1
二、安装包下载
如图,展开官网 Download 选项卡,其中 Source code 一栏适用于【Linux 源码安装】
Linux 下载:点击 Source code,找到最新的 Stable Release,选择 Gzip 包下载。
Windows 下载:点击 Windows 一栏,选择最新版本下载。
官网下载太慢,可以使用华为云镜像站:https://mirrors.huaweicloud.com/python/
三、Windows 安装
1、安装过程
Use admin privileges when installing py.exe
:使用管理员的身份安装,可以保证安装的顺畅,减少失败的可能性。Add python.exe to PATH
:添加到环境变量
可以选择自定义安装,选择自定义安装的目录。我个人习惯默认(C盘空间充足),选择Install Now
安装。
安装成功的页面有一个选项:Disable path length limit,含义是修改注册表让程序支持超过 260 个字符的命令(可以选择设置)。
2、基本知识
装完之后会发现安装了两个应用,Python 和 Python Launcher。如下图。
默认的安装目录:%LocalAppData%/Programs/Python/Python313
安装好之后会添加两个地址到环境变量 PATH:
%LocalAppData%/Programs/Python/Python313
%LocalAppData%/Programs/Python/Python313/Scripts
313 是版本号,不同版本对应目录名不同。
Scripts 就是一般的命令目录,里面有常用的 pip 等。
Python313 目录下有 python.exe 程序,一般执行的 python 文件使用的就是这个命令。
Python Launcher 就是在 %SystemRoot% (C:/Windows)
目录里面加入了 py.exe 命令(等同于 python.exe),这个目录默认是环境 PATH 里面的。
pip(Package Installer for Python),Python 的官方包管理工具。
PyPI(Python Package Index),软件包仓库。一般需要换成国内的镜像源来加速下载。
pip 下载依赖的保存位置位于:%LocalAppData%/Programs/Python/Python313/Lib/site-packages
四、Linux 安装(CentOS7)
1、make 可能遇到的问题
注意:make 输出的异常日志,缺什么补什么
(1)依赖缺失
如上图显示,No such file or directory(缺少文件),最终 compilation terminated(终止编译),很多模块也没有编译完成。原因是我 make 之前忘了安装依赖了。这种情况会导致很多功能异常 —— 比如后面会提到的 SSL 模块缺失,pip 下载 https 地址的时候失败。
(2)gcc 版本过低
如图,编译过程遇到 implicit —— 未声明的函数,这种情况是 gcc 版本过低 —— 一些函数、特性老版本没有。
使用 gcc -v 可以看到 CentOS7 默认的 gcc 版本是 4.8.5。
版本过低,需要切换到 gcc8+ 的版本。
2、依赖安装、环境准备
(1)gcc 环境准备
安装 gcc 可能遇到 CentOS scl 官方源访问异常,替换为阿里镜像源。
请看本站另一篇文章:Linux 更换 yum、apt 镜像源
# 安装 scl 仓库(一般都会有)
yum install -y centos-release-scl
# 安装 gcc8 以及其他开发工具(可能需要换源)
yum install -y devtoolset-8-gcc*
# 激活 gcc8(相当于临时设置,当前会话有效)
scl enable devtoolset-8 bash
# 查看 gcc 版本, 当前 gcc 版本: 8.3.1 20190311 (Red Hat 8.3.1-3)
gcc -v
(2)依赖下载
# 依赖的开发库, devel 意为 develop
yum -y install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi libffi-devel gcc zlib zlib-devel tkinter tk-devel python3-tkinter xz-devel libuuid-devel ncurses-devel
(3)openssl 下载
CentOS7 自带的 openssl 版本 1.0.2k-fips
过低。
yum 源仓库也是旧版本,yum install -y openssl-devel
没用。
下载 openssl 当前的最新版本:openssl-3.5.1,请看本站另一篇文章 —— openssl 安装
openssl 本次安装指定的路径为:/usr/local/ssl
(4)Tcl/tk 下载(可选)
此版本要求 Tcl/tk 库版本:8.5.12,用于编译 _tkinter 模块。
CentOS 7 对应的版本太低,需要另外下载源码安装。
此模块用于 GUI 编程,一般用不上,可以选择不管。
源码安装请看本章另一篇文章 —— Tcl/tk 安装
3、安装过程
在 CentOS7 中,由于 yum 包管理器依赖 Python2,不能直接卸载自带的 Python2。可以通过配置软链接实现双版本共存。
(1)调整 yum 配置中指定的 python 解释器
vi /usr/bin/yum
# 把首行的 #!/usr/bin/python 改为 #!/usr/bin/python2,也就是后面加一个 2
# /usr/libexec/urlgrabber-ext-down 也做同样的调整
(2)安装 python 3.13
# 安装包移动到 /usr/local,解压
tar -zxvf Python-3.13.5.tgz
cd Python-3.13.5
# 检查系统环境, 生成 Makefile, 可以指定自定义安装选项
# 临时设置环境变量: tcl/tk(前两行、可选)、openssl(3-5行)
TCLTK_CFLAGS="-I/usr/local/tcltk/include" \
TCLTK_LIBS="-L/usr/local/tcltk/lib -ltk8.5 -ltcl8.5" \
LDFLAGS="-L/usr/local/ssl/lib64" \
CPPFLAGS="-I/usr/local/ssl/include" \
PKG_CONFIG_PATH="/usr/local/ssl/lib64/pkgconfig" \
./configure --prefix=/usr/local/python313 \
--with-openssl=/usr/local/ssl/ \
--with-openssl-rpath=/usr/local/ssl/lib64 \
--enable-optimizations
# 编译. 注意输出的日志,看有没有模块异常
# 个人笔记本虚拟机编译没有 optimization 3min50s; 有 7min37s
make clean && make
# 安装
make install
--with-openssl:指定 SSL 的根目录(version 3.7.+)
--with-openssl-rpath:设置 OpenSSL 库的运行时库目录(rpath)。默认 no,不设置;auto,根据 -- with-openssl 自动检测 rpath(不靠谱);DIR:指定一个目录 (version 3.10.+)
指定三个 openssl 的环境变量 + with-openssl-rpath=DIR,make 才正确识别到了 openssl 的库...
--prefix:指定软件的统一安装路径。建议指定。装多个版本必须指定,防止文件冲突覆盖。
--enable-optimizations:开启编译优化可能会显著提升 Python 性能但是会使编译过程更长
如果不指定 prefix:
python 的程序目录名(文件夹)都是带上版本号的,基本不会发生覆盖的问题;
文件可能会覆盖:/bin 下文件不同小版本会覆盖,比如安装 3.8 和 3.15,都会生成 python3 这个文件,后安装的会覆盖之前安装的。
比如在 Python2.7 的基础上安装 Python 3.13,不指定 prefix,安装的之后程序目录如下:
/usr/lib/python2.7
/usr/lib64/python2.7
/usr/include/python2.7
/usr/bin/ 目录下还有其他文件: python2.7、python2 等
/usr/local/bin/ 下:python*、idle3*、pip3*、pydoc3*
/usr/local/lib/python3.13 以及 libpython3.13.a 和 pkgconfig 目录
/usr/local/include/python3.13
/usr/local/share/man/man1/python3.1*
指定 prefix,目录结构如下:
cd /usr/local/python313/ && ls
bin include lib share
(3)备份原有 python 命令
mv /usr/bin/python /usr/bin/python.bak
(4)创建新的软连接
ln -s /usr/local/python313/bin/python3.13 /usr/bin/python
# 系统自带有 pip 命令的话,也要先做备份
ln -s /usr/local/python313/bin/pip3.13 /usr/bin/pip
4、基本知识
指定 prefix 安装依赖保存位置:/usr/local/python313/lib/python3.13/site-packages
pip 默认(没有指定 prefix)下载依赖的保存位置位于:/usr/local/lib/python3.13/site-packages
五、验证
1、验证 ssl module 编译是否正常(Linux 安装)
python 源码编译的一座大山 —— ssl 模块编译异常。
# 方式一:
python -m ssl
# 方式二: 打印 openssl 版本
python -c "import ssl; print(ssl.OPENSSL_VERSION)"
# 编译异常,执行上述命令会报错:ModuleNotFoundError: No module named '_ssl'
2、打印版本号
# 打印 python 版本号
py --version
py -V
python --version
# 打印 pip 版本号
pip --version
pip -V
# 打印 python 之禅
python -c "import this"
六、设置镜像源
1、临时设置镜像源
使用 -i 或者 --index-url 选项来临时指定镜像源。例如,使用清华大学的 PyPI 镜像:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
# 测试 pip 下载
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
2、永久设置镜像源
(1)修改 pip 配置文件
要永久设置镜像源,你可以修改 pip 的配置文件。对于 Windows 来说,这个文件通常位于%AppData%/pip/pip.ini
(如果不存在,你可以创建一个);对于 Linux,这个文件位于 ~/.pip/pip.conf
(不存在可以创建一个)
在文件中添加或者修改以下内容:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
(2)使用命令配置
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
(3)验证是否生效
pip config list
# 测试 pip 下载
pip install requests
(4)恢复默认源
方式一:删除 pip 配置文件
方式二:运行命令:
pip config unset global.index-url
七、卸载 Python
1、Windows
直接卸载 Python 和 Python Launcher 即可。
2、Linux
(1)查询 Python 文件
首先,没有指定 prefix,目录默认会带上版本号;指定 prefix,个人习惯也会带上版本号。
find /usr/ -name 'python3*'
(2)删除 Python 文件
# 指定了 --prefix
rm -rf /usr/local/python313
# 没有指定 --prefix
rm -rf /usr/local/bin/python3.13
rm -rf /usr/local/lib/python3.13
rm -rf /usr/local/include/python3.13
rm -f /usr/local/share/man/man1/python3.1*
cd /usr/local/bin
rm -f python*
rm -f idle3*
rm -f pip3*
rm -f pydoc3*
cd /usr/local/lib/
rm -f libpython3.13.a
rm -rf pkgconfig
(3)删除 bin 目录下命令软链接
rm -f /usr/bin/python
rm -f /usr/bin/pip
八、扩展知识
1、交互式解释器
终端使用 python、py 打开,类似 chrome F12 的控制台,可以在此编写代码。
简单打印一个 Hello world:
print('Hello', 'world')
Windows 使用 exit 退出;Linux 使用 exit() 或者 Ctrl-D 退出 。
2、官方参考文档
如下图,可以看见编译需要的 openssl、Tcl/tk 版本以及各个编译参数的信息。
3、pip 指定版本(不推荐使用)
不推荐使用。一般是 conda 环境(一个项目一个环境)下载不同版本的依赖才会使用。详情请看本站文章 —— Miniconda 安装。
pip install requests==1.1