本文最后更新于 over 1 year ago,文中所描述的信息可能已发生改变。
Python 的环境管理确实烦,而且会出现版本之间不兼容的情况,所以有必要知道如何安装不同版本的 Python 并管理其环境.
本文系统环境为 Debian11, 虚拟环境工具使用的是 venv, 采用编译安装的方法. Python 版本为 3.11.6
安装
下载Python源码
去往 Python 官网 下载你想安装的版本的源码, 以目前最新的 Python3.11 为例
使用 wget 下载:
wget https://www.python.org/ftp/python/3.11.6/Python-3.11.6.tar.xz
配置构建
下载完成后, 将其解压:
tar -xf Python-3.11.6.tar.xz
安装必要的依赖软件:
sudo apt update
sudo apt install build-essential zlib1g-dev libncurses5-dev \
libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev pkg-config \
libreadline-dev libffi-dev curl libbz2-dev curl libgdbm-dev \
lzma-dev uuid-dev libsqlite3-dev openssl tk8.6-dev -y
进入 Python 源码文件夹, 并配置
cd Python-3.11.6
./configure --enable-optimizations --with-lto --prefix=/usr/local/python3.11
注意注意
configure
后的 --enable-optimizations
--with-lto
两个参数是为了提高性能, 但它会使得 Python 编译过程变慢, 你可以选择不启用它们. 如果你遇到了问题, 可以尝试只开启 --enable-optimizations
, 或者二者都不使用
关于配置参数的更多信息, 可以参阅官方文档
如果上面命令的输出没有错误, 那么就可以开始编译了.
若提示缺少某个依赖, 请手动安装它
编译安装
运行 make
即可开始构建 Python , 若你有多个 cpu 核心, 可以加上 -j
参数来多核编译, -j
后是你的 cpu 核心数, 可以使用 nproc
获取
若你机器的性能不佳, 这一过程可能十分漫长(几十分钟甚至更久), 你可以使用 screen 或 tmux 使其在后台运行
完成后, 使用 sudo make altinstall
安装(可能也很漫长,但比上一步要快), 之后你就可以使用 Python3.11:
python3.11 --version
环境管理
虚拟环境
创建
Python 的虚拟环境可以将项目与全局环境相互隔离,可以避免污染你的系统环境,并方便得使多个 Python 版本共存与切换.
本文使用的虚拟环境工具是 venv , 它是 Python 官方推荐的工具.
但其实更现代的工具是 poetry , 然而其使用比较复杂,且主要面向 pypl 模块开发者, 如有兴趣你可以自行了解.
安装 venv:
apt install python3-venv
使用以下命令在当前目录下创建虚拟环境:
python3.11 -m venv myenv
这个命令会在你当前目录下创建 myenv
文件夹, 它就是一个"虚拟环境", 其中包含了你所指定的 Python3.11
版本, 未来在虚拟环境中安装的第三方库等文件也会在此文件夹内.
显然, 如果你想创建一个其他 Python 版本的虚拟环境, 那么只需要将前面的 python3.11
改成你需要的版本且已经安装的即可
使用
创建完成后,要进入到虚拟环境,需要激活它,使用以下命令.
source myenv/bin/activate
这时你的终端应该会有一些标识来提示你处在虚拟环境中,如下
在虚拟环境中, python
python3.11
python3
命令都可以打开 python ,并且版本都是 python3.11
在其中使用 pip 安装的包也都在虚拟环境中
使用 deactive
命令可退出虚拟环境
删除
使用 venv 工具创建的虚拟环境实际上就是一个文件夹, 删除它就是删除了环境
默认版本
始终建议使用官方软件源提供的 python 作为默认版本, 如果你真的想要替换默认版本, 那么可以使用下面的命令
sudo ln -sf /usr/bin/python3.11 /usr/bin/python
这条命令将 python3.11 的可执行文件链接到 linux PATH 的默认搜索路径中, 此时系统的默认版本就是 3.11
TIP提示
即使默认版本就是你想要使用的 Python 版本, 你也应该在你的项目里创建虚拟环境, 除非你想把自己的系统环境搞得乱七八糟