Ubuntu下Python多版本共存的实现方法
在Ubuntu系统中,由于系统自带Python版本(如2.7或3.x),而开发中常需要使用不同版本的Python(如3.8、3.9等),因此需要通过工具或系统功能实现多版本共存。以下是几种常用且可靠的方法:
pyenv是Python开发者最常用的版本管理工具,可在用户目录下安装和管理多个Python版本,不影响系统Python,且能通过目录或shell会话灵活切换版本。
pyenv编译Python源码需要依赖一些开发库,执行以下命令安装:
sudo apt update
sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
通过curl下载并运行pyenv安装脚本:
curl https://pyenv.run | bash
将以下内容添加到~/.bashrc
(bash用户)或~/.zshrc
(zsh用户)文件末尾:
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
保存后重新加载配置文件:
source ~/.bashrc # 或 source ~/.zshrc
pyenv install --list
pyenv install 3.8.12
pyenv install 3.9.7
*
标记当前版本):pyenv versions
pyenv global 3.8.12
cd /path/to/project
pyenv local 3.9.7 # 当前目录下使用3.9.7
pyenv shell 3.8.12
python --version # 查看当前使用的Python版本
pyenv versions # 确认版本切换状态
为避免项目依赖冲突,可使用pyenv-virtualenv插件创建隔离的虚拟环境:
# 安装插件(部分pyenv版本已集成)
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
source ~/.bashrc
# 创建虚拟环境(指定Python版本)
pyenv virtualenv 3.8.12 myenv-3.8
# 激活虚拟环境
pyenv activate myenv-3.8
# 停用虚拟环境
pyenv deactivate
update-alternatives是Ubuntu自带的版本管理工具,可用于管理系统级的Python版本(如python3
命令),适合需要快速切换系统默认Python的场景。
通过apt安装需要共存的Python版本(如3.8、3.9):
sudo apt update
sudo apt install python3.8 python3.9
将安装的Python版本添加到alternatives系统中:
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1 # 优先级1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 2 # 优先级2
通过交互式菜单选择默认的python3
版本:
sudo update-alternatives --config python3
根据提示输入对应版本的编号,按回车键确认。
python3 --version # 查看当前默认的Python3版本
python3
命令的默认版本,不影响python
命令(系统可能仍指向Python 2.x)。若需要特定版本的Python(如3.7.12)或启用特殊编译选项(如优化性能),可从源码编译安装到用户目录。
sudo apt install -y build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
从Python官网下载所需版本的源码包(如3.7.12):
wget https://www.python.org/ftp/python/3.7.12/Python-3.7.12.tgz
tar -xf Python-3.7.12.tgz
cd Python-3.7.12
配置编译选项(--prefix
指定安装目录为用户目录,避免覆盖系统文件):
./configure --prefix=$HOME/.local/python3.7.12 --enable-optimizations
make -j $(nproc) # 使用多核编译,加快速度
make altinstall # 使用altinstall避免覆盖系统默认的python3
将安装目录添加到PATH
环境变量(~/.bashrc
或~/.zshrc
):
export PATH="$HOME/.local/python3.7.12/bin:$PATH"
source ~/.bashrc
验证版本:
python3.7 --version # 使用自定义安装的版本
python3
命令,建议使用python3.x
格式的命令。若项目需要完全隔离的开发环境(包括Python版本、依赖库、操作系统),可使用Docker容器。容器内的环境与主机系统完全隔离,不会影响主机配置。
sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
从Docker Hub拉取所需版本的Python镜像(如3.8、3.9):
docker pull python:3.8
docker pull python:3.9
启动容器并在其中运行Python:
docker run -it --name py38 python:3.8 bash # 进入Python 3.8容器
docker run -it --name py39 python:3.9 bash # 进入Python 3.9容器
容器内可直接使用对应版本的Python:
python --version # 查看容器内Python版本
将主机项目目录挂载到容器中,方便代码编辑与调试:
docker run -it -v /path/to/host/project:/project -w /project python:3.8 bash
此时容器内的/project
目录对应主机的/path/to/host/project
,可直接修改代码。
根据自身需求选择合适的方法,即可实现Ubuntu下Python多版本共存。