Ubuntu下Python多版本共存的实现方法

在Ubuntu系统中,由于系统自带Python版本(如2.7或3.x),而开发中常需要使用不同版本的Python(如3.8、3.9等),因此需要通过工具或系统功能实现多版本共存。以下是几种常用且可靠的方法:
pyenv是Python开发者最常用的版本管理工具,可在用户目录下安装和管理多个Python版本,不影响系统Python,且能通过目录或shell会话灵活切换版本。
pyenv编译Python源码需要依赖一些开发库,执行以下命令安装:
sudo apt updatesudo 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 ~/.zshrcpyenv install --listpyenv install 3.8.12pyenv install 3.9.7*标记当前版本):pyenv versionspyenv global 3.8.12cd /path/to/projectpyenv local 3.9.7# 当前目录下使用3.9.7pyenv shell 3.8.12python --version# 查看当前使用的Python版本pyenv versions# 确认版本切换状态为避免项目依赖冲突,可使用pyenv-virtualenv插件创建隔离的虚拟环境:
# 安装插件(部分pyenv版本已集成)git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenvecho 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrcsource ~/.bashrc# 创建虚拟环境(指定Python版本)pyenv virtualenv 3.8.12 myenv-3.8# 激活虚拟环境pyenv activate myenv-3.8# 停用虚拟环境pyenv deactivateupdate-alternatives是Ubuntu自带的版本管理工具,可用于管理系统级的Python版本(如python3命令),适合需要快速切换系统默认Python的场景。
通过apt安装需要共存的Python版本(如3.8、3.9):
sudo apt updatesudo apt install python3.8 python3.9将安装的Python版本添加到alternatives系统中:
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1# 优先级1sudo 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.tgztar -xf Python-3.7.12.tgzcd Python-3.7.12配置编译选项(--prefix指定安装目录为用户目录,避免覆盖系统文件):
./configure --prefix=$HOME/.local/python3.7.12 --enable-optimizationsmake -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 updatesudo apt install docker.iosudo systemctl start dockersudo systemctl enable docker从Docker Hub拉取所需版本的Python镜像(如3.8、3.9):
docker pull python:3.8docker 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多版本共存。