kaisawind's blog
  • 关于
  • 所有帖子

ubuntu安装不同版本python - Wed, Nov 9, 2022

ubuntu安装不同版本python

ubuntu安装不同版本python

在 Ubuntu 系统中,不同项目可能需要不同版本的 Python。默认情况下,Ubuntu 只安装了系统版本的 Python(如 Python 3.10)。本文介绍多种在 Ubuntu 上安装和管理多个 Python 版本的方法。

提示: Python 3.12已发布,建议使用Python 3.8+版本。

Python 版本管理概述

为什么需要多个 Python 版本

  • 不同项目依赖不同的 Python 版本
  • 测试代码在不同 Python 版本下的兼容性
  • 某些库只支持特定 Python 版本
  • 开发和生产环境使用不同版本

版本管理工具对比

工具优点缺点适用场景
PPA简单直接版本有限常用版本
deadsnakes PPA版本丰富需要手动配置多版本共存
pyenv完全隔离编译较慢开发环境
conda包管理一体体积较大数据科学
docker完全隔离资源消耗大CI/CD

方法一:使用 PPA(推荐)

安装 deadsnakes PPA

# 1. 安装必要的工具
sudo apt-get update
sudo apt-get install -y software-properties-common

# 2. 添加 deadsnakes PPA
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update

# 3. 安装特定版本的 Python
sudo apt install python3.8

# 4. 验证安装
python3.8 --version

安装多个版本

# 安装多个 Python 版本
sudo apt install python3.8 python3.9 python3.10 python3.11

# 查看已安装的版本
ls -la /usr/bin/python3.*

# 输出示例:
# /usr/bin/python3.8
# /usr/bin/python3.9
# /usr/bin/python3.10
# /usr/bin/python3.11

安装配套工具

# 为 Python 3.8 安装 pip
sudo apt install python3.8-distutils
curl https://bootstrap.pypa.io/get-pip.py | sudo python3.8

# 为 Python 3.9 安装 pip
sudo apt install python3.9-distutils
curl https://bootstrap.pypa.io/get-pip.py | sudo python3.9

# 安装 venv 模块
sudo apt install python3.8-venv
sudo apt install python3.9-venv

# 验证
python3.8 -m pip --version
python3.8 -m venv --help

方法二:使用 pyenv(推荐开发环境)

安装 pyenv

# 1. 安装依赖
sudo apt-get update
sudo apt-get 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

# 2. 使用 curl 安装
curl https://pyenv.run | bash

# 或使用 git 克隆
git clone https://github.com/pyenv/pyenv.git ~/.pyenv

# 3. 配置环境变量
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc

# 4. 重新加载配置
source ~/.bashrc

# 5. 验证安装
pyenv --version

使用 pyenv 安装 Python

# 查看可用的 Python 版本
pyenv install --list | grep "  3\."

# 安装特定版本
pyenv install 3.8.18
pyenv install 3.9.18
pyenv install 3.10.13
pyenv install 3.11.6
pyenv install 3.12.0

# 查看已安装的版本
pyenv versions

# 设置全局默认版本
pyenv global 3.11.6

# 设置当前目录的版本
cd /path/to/project
pyenv local 3.10.13

# 验证
python --version

pyenv 高级用法

# 查看当前设置的版本
pyenv version

# 列出所有可安装的版本
pyenv install --list

# 卸载版本
pyenv uninstall 3.8.18

# 更新 pyenv
cd ~/.pyenv && git pull

# 查看版本历史
pyenv history

pyenv 插件

# 安装 pyenv-virtualenv
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

# 创建虚拟环境
pyenv virtualenv 3.11.6 myproject-venv

# 激活虚拟环境
pyenv activate myproject-venv

# 退出虚拟环境
pyenv deactivate

# 列出所有虚拟环境
pyenv virtualenvs

# 删除虚拟环境
pyenv uninstall myproject-venv

方法三:使用 conda(推荐数据科学)

安装 Miniconda

# 1. 下载 Miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

# 2. 安装
bash Miniconda3-latest-Linux-x86_64.sh

# 3. 重新加载配置
source ~/.bashrc

# 4. 验证安装
conda --version

使用 conda 管理 Python 版本

# 创建 Python 3.8 环境
conda create -n py38 python=3.8

# 创建 Python 3.10 环境
conda create -n py310 python=3.10

# 激活环境
conda activate py38

# 查看环境
conda env list

# 删除环境
conda remove -n py38 --all

# 安装包
conda install numpy pandas matplotlib

# 从 requirements.txt 安装
conda install --file requirements.txt

conda 配置

# 添加清华镜像源(加速下载)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/

# 显示安装来源
conda config --set show_channel_urls yes

# 自动确认安装
conda config --set always_yes yes

# 更新 conda
conda update conda

方法四:使用 Docker(推荐生产环境)

Docker 安装 Python

# Dockerfile - Python 3.8
FROM python:3.8-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["python", "app.py"]

使用不同 Python 版本

# 运行 Python 3.8 容器
docker run -it --rm python:3.8 python --version

# 运行 Python 3.10 容器
docker run -it --rm python:3.10 python --version

# 挂载本地目录
docker run -it --rm -v $(pwd):/app python:3.8 bash

# 在容器中运行脚本
docker run -it --rm -v $(pwd):/app python:3.8 python /app/script.py

Docker Compose 多版本

# docker-compose.yml
version: '3.8'

services:
  app38:
    image: python:3.8
    working_dir: /app
    volumes:
      - ./app:/app
    command: python main.py

  app310:
    image: python:3.10
    working_dir: /app
    volumes:
      - ./app:/app
    command: python main.py

实际应用场景

场景一:开发环境使用 pyenv

# 项目 A 需要 Python 3.8
cd ~/projects/project-a
pyenv local 3.8.18
python --version  # Python 3.8.18

# 创建虚拟环境
python -m venv venv
source venv/bin/activate

# 安装依赖
pip install -r requirements.txt

场景二:数据科学使用 conda

# 创建数据科学环境
conda create -n datascience python=3.10

conda activate datascience

# 安装科学计算包
conda install numpy pandas matplotlib scipy scikit-learn

# 安装 Jupyter
conda install jupyterlab

# 启动 Jupyter
jupyter lab

场景三:生产环境使用 Docker

# 构建 Docker 镜像
docker build -t myapp:3.8 .

# 运行容器
docker run -d -p 8000:8000 --name myapp myapp:3.8

# 查看日志
docker logs -f myapp

场景四:CI/CD 使用多版本测试

# .github/workflows/test.yml
name: Test

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
    
    steps:
    - uses: actions/checkout@v2
    
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}
    
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    
    - name: Run tests
      run: |
        pytest tests/

常见问题和解决方案

1. pip 安装失败

问题: 新安装的 Python 无法使用 pip

解决方案:

# 安装 distutils
sudo apt install python3.x-distutils

# 使用 get-pip.py 安装 pip
curl https://bootstrap.pypa.io/get-pip.py | python3.x

# 或使用 ensurepip
python3.x -m ensurepip --upgrade

2. 编译 pyenv 时出错

问题: pyenv install 编译失败

解决方案:

# 安装完整的编译依赖
sudo apt-get 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

# 清理之前的构建
rm -rf ~/.pyenv/versions/3.x.x

# 重新安装
CFLAGS="-I/usr/include/openssl" LDFLAGS="-L/usr/lib" pyenv install 3.x.x

3. SSL 证书错误

问题: pip install 时出现 SSL 错误

解决方案:

# 安装 ca-certificates
sudo apt-get install ca-certificates

# 更新证书
sudo update-ca-certificates

# 或使用 --trusted-host 参数(不推荐)
pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org package_name

4. 版本切换不生效

问题: python –version 仍然是旧版本

解决方案:

# 对于 pyenv
pyenv global 3.10.13
source ~/.bashrc

# 对于 PPA 安装的版本
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 2

# 手动切换
sudo update-alternatives --config python3

5. 虚拟环境问题

问题: venv 创建失败或无法激活

解决方案:

# 确保 venv 模块已安装
sudo apt install python3.x-venv

# 创建虚拟环境
python3.x -m venv myenv

# 激活虚拟环境
source myenv/bin/activate

# 退出虚拟环境
deactivate

脚本自动化

多版本 Python 安装脚本

#!/bin/bash
# install_python_versions.sh

set -e

PYTHON_VERSIONS=("3.8.18" "3.9.18" "3.10.13" "3.11.6" "3.12.0")

echo "开始安装多个 Python 版本..."

# 安装依赖
sudo apt-get update
sudo apt-get 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

# 安装 pyenv
if ! command -v pyenv &> /dev/null; then
    echo "安装 pyenv..."
    curl https://pyenv.run | bash
    
    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
    echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
    echo 'eval "$(pyenv init -)"' >> ~/.bashrc
    
    source ~/.bashrc
fi

# 安装 Python 版本
for version in "${PYTHON_VERSIONS[@]}"; do
    if ! pyenv versions | grep -q "$version"; then
        echo "安装 Python $version..."
        pyenv install "$version"
    else
        echo "Python $version 已安装"
    fi
done

# 设置默认版本
pyenv global "${PYTHON_VERSIONS[-1]}"

echo "所有 Python 版本安装完成!"
pyenv versions

项目环境设置脚本

#!/bin/bash
# setup_project_env.sh

PROJECT_NAME=$1
PYTHON_VERSION=${2:-3.10.13}

if [ -z "$PROJECT_NAME" ]; then
    echo "用法: $0 <项目名称> [Python版本]"
    exit 1
fi

echo "为项目 $PROJECT_NAME 设置 Python $PYTHON_VERSION 环境..."

# 使用 pyenv 创建虚拟环境
pyenv local "$PYTHON_VERSION"
python -m venv venv

# 激活虚拟环境
source venv/bin/activate

# 升级 pip
pip install --upgrade pip

# 安装常用工具
pip install pip-tools black isort flake8 mypy pytest

# 创建 requirements 文件
touch requirements.txt
touch dev-requirements.txt

echo "环境设置完成!"
echo "激活环境: source venv/bin/activate"

最佳实践

  1. 版本选择:

    • 生产环境使用最新的稳定版本
    • 避免使用即将 EOL 的版本
    • 关注每个版本的发布周期
  2. 环境隔离:

    • 每个项目使用独立的虚拟环境
    • 不要混用不同项目的依赖
    • 定期清理不需要的虚拟环境
  3. 依赖管理:

    • 使用 requirements.txt 或 pyproject.toml
    • 锁定依赖版本
    • 定期更新依赖包
  4. 开发工作流:

    • 使用 .python-version 文件(pyenv)
    • 配置 CI/CD 测试多个版本
    • 文档化项目依赖
  5. 安全性:

    • 定期更新 Python 版本
    • 及时更新依赖包
    • 使用 pip audit 检查漏洞

相关资源

  • Python 官方网站: https://www.python.org/
  • pyenv GitHub: https://github.com/pyenv/pyenv
  • deadsnakes PPA: https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa
  • conda 文档: https://docs.conda.io/
  • Docker Hub Python: https://hub.docker.com/_/python


辽ICP备2021007608号 | © 2026 | kaisawind

Facebook Twitter GitHub