在 Ubuntu 上安装和配置 Python – wiki基地


在 Ubuntu 上安装和配置 Python:从基础到精通

Python 作为当今最受欢迎的编程语言之一,以其简洁的语法、强大的功能和广泛的应用领域(从 Web 开发、数据科学到自动化脚本和人工智能)赢得了全球开发者的青睐。而 Ubuntu,作为最流行的 Linux 发行版之一,以其稳定性、开源特性和强大的社区支持,是进行 Python 开发的绝佳平台。

本篇文章将带您深入了解如何在 Ubuntu 系统上安装和配置 Python 环境。我们将从基础开始,介绍 Ubuntu 系统自带的 Python 版本,然后详细探讨多种安装 Python 的方法,包括使用系统包管理器、PPA、从源代码编译,以及使用强大的版本管理工具(如 pyenv)。此外,我们还将重点讲解 Python 环境配置中至关重要的部分:包管理器 pip 和虚拟环境的使用,帮助您构建干净、隔离且易于管理的开发环境。无论您是 Python 初学者还是有经验的开发者,本文都将为您提供全面而深入的指导。

引言:为何选择在 Ubuntu 上使用 Python?

Ubuntu 的开源哲学与 Python 的开放性天然契合。Ubuntu 提供了稳定且维护良好的软件包仓库,使得安装和更新软件变得非常便捷。同时,Ubuntu 的命令行环境强大且灵活,非常适合进行开发工作,尤其是在处理文件、执行脚本和管理依赖方面。

对于 Python 开发者而言,Ubuntu 提供了:

  1. 稳定的基础环境: Ubuntu 长期支持版本 (LTS) 提供多年的安全更新和维护,为开发项目提供可靠的基础。
  2. 便捷的包管理: apt 包管理器可以轻松安装 Python 及其许多库的系统级版本。
  3. 强大的命令行工具: Linux 环境下的各种命令行工具能与 Python 脚本高效协同工作。
  4. 广泛的社区支持: Ubuntu 和 Python 都有庞大活跃的社区,遇到问题时很容易找到帮助。

然而,正如任何强大的工具一样,正确地安装和配置 Python 环境是充分发挥其潜力的关键。特别是理解如何管理多个 Python 版本以及如何处理项目间的依赖冲突,对于专业的 Python 开发至关重要。

1. 了解 Ubuntu 系统自带的 Python

Ubuntu 系统通常会预装 Python,这主要出于系统内部脚本和工具的需要。然而,这个系统自带的 Python 版本往往不是最新的,而且强烈不建议您修改或使用 sudo pip install 向其安装第三方库。这样做可能会破坏系统工具,导致系统不稳定。

检查系统自带的 Python 版本:

打开终端,输入以下命令:

bash
python --version

或者更常见地,检查 Python 3 的版本(因为现代 Ubuntu 版本主要使用 Python 3):

bash
python3 --version

您可能会看到类似 Python 3.8.10Python 3.10.12 这样的输出,这取决于您的 Ubuntu 版本。

理解 pythonpython3 命令:

在较新的 Ubuntu 版本中,python 命令可能不再默认指向任何 Python 版本,或者指向 Python 2(如果安装了),而 python3 则指向系统默认的 Python 3 版本。为了避免混淆,强烈建议在编写脚本或执行命令时明确使用 python3。许多现代 Python 工具和教程也都假定您使用 python3 命令。

为什么要安装新的 Python 版本?

尽管系统自带 Python,您可能仍需要安装新版本的原因包括:

  • 获取最新功能和性能改进: 新版本的 Python 通常包含语言层面的改进、新的内置函数、更优的性能等。
  • 满足特定项目需求: 某些库或框架可能要求特定版本的 Python。
  • 不干扰系统: 通过独立安装或使用版本管理器安装的 Python 版本,不会与系统依赖的 Python 产生冲突。

2. Python 的安装方法

有多种方法可以在 Ubuntu 上安装 Python。选择哪种方法取决于您的需求:是只需要一个相对稳定的版本,还是需要最新的版本,或是需要在多个版本之间轻松切换。

2.1 使用系统包管理器 APT (Advanced Packaging Tool)

这是在 Ubuntu 上安装软件最简单、最安全的方法之一。APT 从 Ubuntu 的官方软件仓库下载预编译的软件包。安装的 Python 版本通常与您当前的 Ubuntu 版本相匹配,相对稳定,但可能不是最新的。

安装步骤:

  1. 更新软件包列表: 这是安装任何新软件前的良好习惯,确保您能下载到最新版本的软件包信息。

    bash
    sudo apt update

    这个命令会从 Ubuntu 软件源下载最新的软件包列表,但不会安装或升级任何软件。

  2. 安装 Python 3: Ubuntu 大多数现代版本都已经预装 Python 3,但如果没有或者您想确保安装了完整的开发组件,可以使用此命令。

    bash
    sudo apt install python3

    如果您还需要 Python 的开发头文件(例如,当您需要编译某些 Python 库时),可以安装 python3-dev

    bash
    sudo apt install python3-dev

  3. 验证安装:

    bash
    python3 --version

优点:

  • 简单易行: 只需几个命令。
  • 稳定安全: 软件包经过 Ubuntu 官方测试和维护。
  • 依赖管理: APT 会自动处理 Python 依赖的其他系统库。

缺点:

  • 版本较旧: 通常不是 Python 的最新发布版本。
  • 难以管理多版本: 如果需要安装多个不同版本的 Python,APT 不太方便。
  • 不适合隔离项目依赖: APT 安装的库是全局的,容易造成项目间的依赖冲突(虽然这不是 Python 安装本身的问题,而是后续环境配置的问题,但 APT 方式更凸显这个问题)。

2.2 使用 PPA (Personal Package Archive)

PPA 是一种让用户上传和分发软件的方式,常用于提供官方仓库中没有的软件版本或更新版本。对于 Python,有一个著名的 PPA 叫做 deadsnakes,它提供了许多不同版本的 Python,包括一些较新的版本。

安装步骤(以安装 Python 3.9 为例):

  1. 添加 deadsnakes PPA:

    bash
    sudo add-apt-repository ppa:deadsnakes/ppa

    系统可能会提示您按 Enter 确认添加。

  2. 更新软件包列表: 添加新的 PPA 后,需要再次更新软件包列表。

    bash
    sudo apt update

  3. 安装特定版本的 Python: 现在您可以安装 PPA 提供的 Python 版本了。例如,安装 Python 3.9:

    bash
    sudo apt install python3.9

    您还可以安装对应的开发头文件:

    bash
    sudo apt install python3.9-dev

    以及 venv 模块(对于 Python 3.3+ 通常已包含在 python3.x 包中,但有时需要单独安装):

    bash
    sudo apt install python3.9-venv

    pip 包(通常也已包含,但如果需要,可以安装):

    “`bash
    sudo apt install python3-pip # 注意,安装的是对应系统默认python3的pip

    或者如果您安装的是特定版本,通常其自带的ensurepip会提供pip

    “`

    注意: 使用 PPA 安装特定版本时,执行文件通常是 python3.9,而不是覆盖默认的 python3

  4. 验证安装:

    bash
    python3.9 --version

优点:

  • 提供较新的 Python 版本: 比官方仓库版本新,但通常不是最新的。
  • 方便安装特定版本: 可以安装官方仓库没有的多个版本。
  • 仍然使用 APT 进行管理: 安装、升级和卸载相对方便。

缺点:

  • 非官方源: PPA 由第三方维护,虽然 deadsnakes PPA 比较有名和可靠,但理论上存在风险。
  • 可能与其他 PPA 冲突: 虽然不常见,但有可能发生。
  • 版本切换仍然需要手动管理: 比如修改 PATH 或使用软链接,不如版本管理器方便。

2.3 从源代码编译安装

从源代码编译安装 Python 提供了最大的灵活性,您可以安装任何版本(包括最新的 pre-release 版本),并可以配置编译选项。然而,这是最复杂的方法,需要安装编译工具和依赖库。

安装步骤(以安装 Python 3.12 为例):

  1. 安装编译依赖: Python 的编译需要一些库和工具。这些库可能因 Python 版本和您的系统而异,但以下是一些常见的必需品:

    bash
    sudo apt update
    sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev wget libbz2-dev liblzma-dev tk-dev uuid-dev

  2. 下载 Python 源代码: 访问 Python 官方网站 (https://www.python.org/downloads/source/) 下载您想要安装版本的源代码压缩包(通常是 .tgz.tar.xz 文件)。或者在终端使用 wget 下载。

    “`bash

    以 Python 3.12.0 为例,请替换为您要下载的实际版本和链接

    wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz
    “`

  3. 解压源代码:

    bash
    tar -xf Python-3.12.0.tgz
    cd Python-3.12.0/

  4. 配置编译选项: 运行 ./configure 脚本。使用 --enable-optimizations 会进行一些耗时的优化,但能提升 Python 性能。重要: 如果您不想覆盖系统自带的 python3 命令,请使用 --prefix 指定安装路径,例如安装到 /opt/python/3.12 或您的用户主目录下的某个目录。如果您直接使用 make install without --prefix,它默认会安装到 /usr/local,并可能创建 python3 的软链接,这仍有覆盖系统命令的风险。更安全的做法是使用 make altinstall

    “`bash

    配置,启用优化

    ./configure –enable-optimizations –prefix=/opt/python/3.12

    或者如果使用 make altinstall,可以不指定 prefix,但 altinstall 仍然是推荐的

    ./configure –enable-optimizations

    “`

  5. 编译源代码: make 命令会编译 Python。-j 选项可以指定并行编译的进程数,通常设置为您的 CPU 核心数可以加快速度。

    bash
    make -j$(nproc)

  6. 安装 Python: 强烈建议使用 make altinstall 而不是 make installmake install 会创建 python3pip3 等命令的软链接,可能覆盖系统默认命令。make altinstall 只会安装版本化的可执行文件(如 python3.12),不会创建 python3 等非版本化链接。

    “`bash

    如果配置时使用了 –prefix

    sudo make altinstall

    如果没有使用 –prefix,但使用了 altinstall

    sudo make altinstall

    ``
    *注意:* 如果您使用了
    –prefix将 Python 安装到用户目录(如~/opt/python/3.12),则安装时无需sudomake altinstall`。

  7. 验证安装: 检查新安装的 Python 版本。如果使用了 altinstall,命令会包含版本号。

    “`bash
    /opt/python/3.12/bin/python3.12 –version

    或者如果在默认位置安装但使用了 altinstall

    python3.12 –version

    “`

优点:

  • 极致的灵活性: 可以安装任何版本,自定义编译选项。
  • 最新版本: 可以第一时间使用最新的 Python 功能。
  • 完全独立: 安装在指定位置,不会干扰系统 Python(如果正确使用 --prefixaltinstall)。

缺点:

  • 复杂且耗时: 需要手动下载、解压、配置、编译和安装,过程较长,容易出错。
  • 依赖管理困难: 需要手动安装所有编译依赖。
  • 更新和卸载麻烦: 更新到新版本需要重复整个过程,卸载也需要手动删除文件。
  • 不适合频繁切换版本: 每次切换或安装新版本都很麻烦。

2.4 使用 Python 版本管理器 (推荐用于开发)

对于进行多个项目开发、需要使用不同 Python 版本或者需要频繁切换版本的开发者来说,使用 Python 版本管理器是最推荐的方式。它们可以在用户级别安装和管理多个 Python 版本,并且可以轻松地在不同的项目目录或全局范围内切换所需的 Python 版本,而不会干扰系统。其中最流行的是 pyenv 和基于 Anaconda/Miniconda 的环境管理器。

使用 pyenv 安装和管理 Python (强烈推荐)

pyenv 是一个简单、强大的 Python 版本管理工具。它通过修改 PATH 环境变量,在运行时动态切换 Python 版本。

安装步骤:

  1. 安装 pyenv 的依赖: pyenv 本身是 shell 脚本,但它安装不同版本的 Python 时需要编译,因此需要安装与从源代码编译类似的构建依赖。

    bash
    sudo apt update
    sudo apt install build-essential libssl-dev zlib1g-dev libbz2-1.0 libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

  2. 安装 pyenv: 可以通过 curl 脚本或直接从 GitHub 克隆仓库安装。推荐使用 pyenv-installer 脚本,它还会安装一些有用的插件。

    bash
    curl https://pyenv.run | bash

  3. 配置 shell 环境: pyenv 需要添加到您的 shell 配置文件中(如 ~/.bashrc, ~/.zshrc 等),以便在每次打开终端时加载。安装脚本通常会提示您需要添加的行。您需要手动编辑文件,添加类似以下的内容:

    “`bash

    Add these lines to your shell configuration file (e.g., ~/.bashrc)

    export PYENV_ROOT=”$HOME/.pyenv”
    command -v pyenv >/dev/null || export PATH=”$PYENV_ROOT/bin:$PATH”
    eval “$(pyenv init –path)”
    eval “$(pyenv init -)”
    eval “$(pyenv virtualenv-init -)” # 如果安装了 pyenv-virtualenv 插件
    ``
    *注意:*
    pyenv init –path确保pyenv命令本身可用,pyenv init –则设置 shims 路径并初始化自动完成等功能,pyenv virtualenv-init –用于pyenv` 与虚拟环境的集成。

  4. 重新加载 shell 配置: 使配置生效,无需关闭终端。

    “`bash
    source ~/.bashrc # 如果您修改的是 ~/.bashrc

    或者 source ~/.zshrc 如果您使用 Zsh

    “`

  5. 验证 pyenv 安装:

    bash
    pyenv --version

使用 pyenv 安装 Python 版本:

  1. 查看可安装版本: pyenv 可以列出它可以安装的所有 Python 版本。

    bash
    pyenv install --list

    列表会很长,包括 CPython (官方版本), Miniconda, Anaconda, Jython, PyPy 等。

  2. 安装指定版本: 选择一个您需要的版本进行安装。pyenv 会下载源代码并编译安装到 ~/.pyenv/versions 目录下。

    bash
    pyenv install 3.10.12 # 安装 CPython 3.10.12
    pyenv install 3.12.0 # 安装 CPython 3.12.0

    这个过程可能需要一些时间,取决于您的网络速度和计算机性能。

  3. 查看已安装版本:

    bash
    pyenv versions

    输出会列出系统版本 (system) 和您通过 pyenv 安装的版本,当前活动版本前面会有 * 标记。

使用 pyenv 切换 Python 版本:

pyenv 允许您在不同级别设置 Python 版本:

  • 全局 (Global): 设置整个系统(在没有局部和 shell 设置的情况下)的默认 Python 版本。
    bash
    pyenv global 3.10.12 # 设置全局默认版本为 3.10.12
    pyenv global system # 设置全局默认版本为系统自带的 Python
  • 局部 (Local): 在当前目录及其子目录中设置 Python 版本。这非常适合项目开发,每个项目可以使用不同的 Python 版本。pyenv 会在当前目录创建一个 .python-version 文件。
    bash
    cd my_project
    pyenv local 3.12.0 # 设置当前目录及其子目录使用 3.12.0

    当您进入 my_project 目录时,pythonpython3 命令就会指向 Python 3.12.0。离开该目录则恢复到上层设置(全局或父目录的局部设置)。
  • Shell: 在当前 shell 会话中设置 Python 版本。优先级最高,会覆盖局部和全局设置。当您退出 shell 会话时失效。
    bash
    pyenv shell 3.9.16 # 在当前终端会话中使用 3.9.16

优点:

  • 完美的版本隔离和管理: 轻松安装、切换和卸载多个 Python 版本,互不干扰。
  • 不干扰系统 Python: 所有安装都在用户目录下,非常安全。
  • 每个项目独立的 Python 版本: 使用 pyenv local 可以为不同项目指定不同版本的 Python,解决版本冲突问题。
  • 支持多种 Python 实现: 不仅是 CPython,还支持 Miniconda/Anaconda, PyPy 等。

缺点:

  • 初始设置相对复杂: 需要安装依赖、配置 shell。
  • 安装版本需要编译: 安装过程可能较慢。
  • 需要了解其工作原理: 虽然使用简单,但理解 shims 和 PATH 的概念有助于排查问题。

使用 Miniconda 或 Anaconda (推荐用于数据科学)

Miniconda 和 Anaconda 是包含 Python 解释器、包管理器 conda 以及许多常用科学计算库的分发版。Anaconda 体积较大,包含大量预装库;Miniconda 则比较小巧,只包含 Python 和 conda,用户按需安装其他库。它们也提供了环境管理功能,与 pyenv 类似但基于 conda 命令。

安装步骤 (以 Miniconda 为例):

  1. 下载安装脚本: 访问 Miniconda 官网 (https://docs.conda.io/en/latest/miniconda.html) 下载适用于 Linux 的安装脚本(一个 .sh 文件)。

    “`bash

    示例:下载最新版本的 Linux 64-bit 脚本

    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
    “`

  2. 运行安装脚本:

    bash
    bash Miniconda3-latest-Linux-x86_64.sh

    阅读许可协议,按 Enter 接受,然后按照提示操作。安装程序会询问安装位置(默认为用户主目录下的 miniconda3anaconda3 ),以及是否将 conda 初始化添加到您的 shell 配置文件中。选择 “yes” 进行初始化。

  3. 重新加载 shell 配置: 使配置生效。

    bash
    source ~/.bashrc # 或 ~/.zshrc

  4. 验证安装:

    bash
    conda --version
    python --version # 现在这个 python 命令指向 conda 环境中的 python

使用 conda 管理环境:

  • 创建新环境: 创建一个指定 Python 版本的环境(例如,名为 myenv,使用 Python 3.9)。

    bash
    conda create -n myenv python=3.9

  • 激活环境:

    bash
    conda activate myenv

    终端提示符会显示当前激活的环境名称。

  • 安装包到当前环境:

    bash
    conda install numpy pandas

    conda 会在当前环境中安装这些包及其依赖。

  • 列出环境:

    bash
    conda env list

  • 停用环境:

    bash
    conda deactivate

优点:

  • 强大的环境管理: conda 不仅管理 Python 版本,还能管理非 Python 依赖库,特别适合科学计算领域。
  • 方便安装科学计算库: conda 仓库包含许多预编译的科学计算包,安装速度快,依赖问题少。
  • 不干扰系统: 所有环境都在安装目录下。

缺点:

  • 体积较大: Anaconda 尤其如此。Miniconda 相对较小。
  • 独立的包管理器: 需要同时使用 condapip(虽然 conda 环境中也可以用 pip)。
  • 环境切换需要激活/停用: 虽然方便,但与 pyenv 的自动切换机制略有不同。

3. 配置 Python 环境:PIP 和虚拟环境

无论您选择哪种安装方法(除了使用 Miniconda/Anaconda,它自带 conda 包管理器),了解如何使用 pip 安装第三方库以及如何使用虚拟环境隔离项目依赖都是至关重要的。

3.1 使用 PIP 安装和管理包

pip 是 Python 的官方包安装器,用于从 Python Package Index (PyPI) 或其他索引安装、升级和管理 Python 包。

安装 pip:

  • 如果您使用 apt 安装 python3,通常 pip 也会随之安装,可通过 sudo apt install python3-pip 确保。
  • 如果您从源代码编译安装,您可能需要在编译时启用 ensurepip 模块,或者在安装后手动运行 python -m ensurepip --upgrade 来安装 pip
  • 如果您使用 pyenvconda 安装 Python 版本,pip 通常会随该版本一起安装并配置好。

验证 pip 安装:

确保您使用的 pip 是与您当前激活或希望使用的 Python 版本相关联的。在使用 pyenv 或激活虚拟环境时,直接运行 pippip3 命令即可。

“`bash
pip –version

或者

pip3 –version
“`
输出会显示 pip 的版本以及它属于哪个 Python 安装。

常用 pip 命令:

  • 安装包:

    bash
    pip install <package_name> # 安装最新版本
    pip install <package_name>==x.y.z # 安装指定版本
    pip install <package_name>>=x.y.z # 安装大于等于指定版本的最新版本
    pip install -r requirements.txt # 从 requirements.txt 文件批量安装

    注意: 永远不要使用 sudo pip install,除非您非常确定自己在做什么(例如,安装针对系统用户的命令行工具)。通常情况下,应该在虚拟环境中安装包。

  • 升级包:

    bash
    pip install --upgrade <package_name>

  • 卸载包:

    bash
    pip uninstall <package_name>

  • 列出已安装包:

    bash
    pip list

  • 查看包信息:

    bash
    pip show <package_name>

  • 生成依赖文件: 将当前环境中已安装的所有包及其精确版本冻结到文件中。

    bash
    pip freeze > requirements.txt

    这个文件常用于分享项目依赖,方便他人在其环境中重现完全相同的依赖组合。

3.2 使用虚拟环境隔离项目依赖 (至关重要!)

不同的 Python 项目往往需要不同版本的第三方库,甚至可能需要不同版本的 Python 本身。如果在全局环境中安装所有库,很容易出现版本冲突,导致项目无法正常运行。虚拟环境就是为了解决这个问题而生。

什么是虚拟环境?

虚拟环境是一个独立的目录,包含一个特定版本的 Python 解释器以及该环境专属的 pip 工具。在该环境中安装的任何包都只会存在于该环境的 site-packages 目录中,与全局环境和其他虚拟环境完全隔离。

想象一下,每个项目都有一个独立的、装满所需工具的工具箱,不同项目的工具箱互相独立,互不干扰。

为什么必须使用虚拟环境?

  • 避免依赖冲突: 项目 A 需要库 X 的版本 1.0,项目 B 需要库 X 的版本 2.0。虚拟环境可以轻松满足,一个环境安装 1.0,另一个安装 2.0。
  • 保持全局环境清洁: 系统自带或全局安装的 Python 环境不会被项目依赖弄乱,减少对系统稳定性的影响。
  • 方便项目依赖管理: 使用 pip freeze > requirements.txt 可以精确记录当前项目的依赖,方便分享和重现环境。
  • 安全: 在用户目录下的虚拟环境中安装包不需要 sudo 权限,避免了潜在的权限问题和风险。

使用 venv 创建和管理虚拟环境 (Python 3.3+ 内置)

venv 模块是 Python 3.3 版本后内置的虚拟环境创建工具,使用方便。

创建虚拟环境:

在您的项目目录下或者您希望存放虚拟环境的目录中打开终端,运行:

bash
python3 -m venv myenv

* python3:指定使用哪个 Python 解释器来创建虚拟环境(这里使用当前系统默认的 Python 3)。如果您使用 pyenv 切换了 Python 版本,运行 python -m venv myenvpython3 -m venv myenv 将使用当前 pyenv 设置的 Python 版本创建环境。
* -m venv: 告诉 Python 运行 venv 模块。
* myenv: 您希望创建的虚拟环境目录名称。通常命名为 venv, .venv, env 等。

这会在当前目录下创建一个名为 myenv 的目录,其中包含 Python 解释器副本、pip 以及用于激活环境的脚本。

激活虚拟环境:

在终端中进入虚拟环境目录,并运行激活脚本:

bash
source myenv/bin/activate

成功激活后,您的终端提示符前面通常会显示虚拟环境的名称(例如 (myenv)),表示您现在工作在这个隔离的环境中。

在虚拟环境中使用 pip:

激活环境后,直接使用 pip 命令即可,它会自动指向当前虚拟环境中的 pip

bash
pip install requests # 将 requests 库安装到当前激活的 myenv 环境中

停用虚拟环境:

完成工作后,输入 deactivate 命令即可退出虚拟环境,回到全局环境。

bash
deactivate

终端提示符前面的环境名称会消失。

使用 virtualenv 创建和管理虚拟环境 (更灵活)

virtualenv 是一个更早出现、功能更强大的虚拟环境工具,它是 venv 的前身。它兼容旧版本的 Python,并提供更多配置选项。如果您需要支持 Python 2 或需要更高级的功能,可以使用 virtualenv

  1. 安装 virtualenv: virtualenv 本身是一个 Python 包,需要使用 pip 安装到全局环境(或者您选择的某个基础环境中)。

    bash
    pip install virtualenv

    注意: 这是少数可以使用 pip install 安装到全局的工具之一,因为 virtualenv 本身就是一个命令行工具,通常不依赖特定项目。但如果可能,最好将其安装在某个稳定的基础环境中(例如使用 pyenv 安装一个基础 Python 版本,并在该版本下安装 virtualenv)。或者,如果您使用的是 pyenv,可以直接通过 pyenv install virtualenv 命令来安装。

  2. 创建虚拟环境:

    “`bash
    virtualenv myenv_virt

    或者指定 Python 版本(如果系统中安装了多个版本或使用了 pyenv)

    virtualenv -p /usr/bin/python3.9 myenv_virt

    或使用 pyenv 安装的版本

    virtualenv -p $(pyenv which python3.10) myenv_virt

    “`

  3. 激活和停用: 激活和停用方式与 venv 相同。

    “`bash
    source myenv_virt/bin/activate

    … 工作 …

    deactivate
    “`

虚拟环境的最佳实践:

  • 每个项目一个虚拟环境: 为您开发的每个 Python 项目创建一个独立的虚拟环境。
  • 命名规范: 虚拟环境目录通常放在项目根目录下,命名为 venv, .venv, env 或其他有意义的名称。
  • 添加到 .gitignore 虚拟环境目录包含大量文件,不应该提交到版本控制系统(如 Git)。将虚拟环境目录添加到项目的 .gitignore 文件中。
  • 使用 requirements.txt 在虚拟环境中安装完项目所需的所有依赖后,运行 pip freeze > requirements.txt 生成依赖文件,并将 requirements.txt 文件提交到版本控制。其他开发者只需克隆仓库,创建新的虚拟环境,然后运行 pip install -r requirements.txt 即可安装所有依赖。

4. PATH 环境变量与版本优先级

理解 PATH 环境变量有助于理解系统如何找到您输入的命令(包括 pythonpip)。当您在终端输入一个命令时,shell 会按照 PATH 环境变量中列出的目录顺序去查找对应的可执行文件,找到第一个匹配的就执行。

bash
echo $PATH

这个命令会输出一个由冒号分隔的目录列表。

PATH 与 Python 版本:

  • 系统安装的 Python 可执行文件通常在 /usr/bin/usr/local/bin 等目录中,这些目录通常包含在默认的 PATH 中。
  • 从源代码使用 --prefix 安装的 Python 会将其可执行文件放在指定路径的 bin 子目录中(例如 /opt/python/3.12/bin)。要使用这个版本,您需要将这个目录添加到 PATH 中,并且放在系统默认路径的前面,或者直接使用完整路径调用(/opt/python/3.12/bin/python3.12)。
  • 使用 pyenv 时,pyenv init 会在您的 PATH 最前面插入一个指向 ~/.pyenv/shims 的目录。shims 目录包含一些脚本(shim),这些脚本会拦截 python, pip 等命令,然后根据您的 pyenv 设置(global, local, shell)决定调用哪个真实版本的 Python 或 pip 可执行文件。这是 pyenv 实现版本切换的核心机制。
  • 激活虚拟环境时,激活脚本会在当前 shell 会话的 PATH 最前面插入虚拟环境的 bin 目录。这样,当您输入 pythonpip 时,shell 会优先在虚拟环境的 bin 目录中查找并执行相应的虚拟环境专属的可执行文件。

配置 PATH (通常不需要手动,除非特定情况):

如果您从源代码安装到非标准位置,或者需要将某个特定版本的 Python 加入 PATH,可以编辑您的 shell 配置文件(如 ~/.bashrc),添加类似以下行:

bash
export PATH="/path/to/your/python/bin:$PATH"

然后运行 source ~/.bashrc 使更改生效。但如前所述,使用 pyenv 或虚拟环境是更推荐的 PATH 管理方式。

5. 常见问题与故障排除

  • command not found: pythoncommand not found: python3 Python 没有正确安装,或者安装目录不在 PATH 中,或者 shell 配置没有重新加载。检查安装步骤,确保 PATH 配置正确并已 source
  • pip: command not found pip 没有安装,或者它所在的目录不在 PATH 中。在激活的虚拟环境或使用 pyenv 时应能找到 pip。如果不能,尝试重新安装 pip 或检查 PATH。
  • Permission denied 安装包时: 这是因为您尝试将包安装到需要管理员权限的系统目录中。切勿使用 sudo pip install。请确保您在激活的虚拟环境中运行 pip install,这样包会安装在用户目录下的虚拟环境中,无需 root 权限。
  • 不同终端窗口 Python 版本不同: 可能是因为使用了 pyenv shell 或激活了不同的虚拟环境。检查每个终端窗口的提示符,看是否有环境名称或使用 pyenv versionswhich python 命令查看当前生效的版本。
  • ModuleNotFoundError 尝试导入一个库时出现此错误,说明该库没有安装在当前激活的 Python 环境中。确保您已激活了正确的虚拟环境,并在该环境中运行 pip install <library_name>
  • pyenv 问题: 如果 pyenv 命令无法找到或无法切换版本,请仔细检查 pyenv 的安装和 shell 配置步骤,特别是 eval "$(pyenv init -)"source 命令是否正确执行。确保 PATH 配置正确,且 ~/.pyenv/shims 目录位于 PATH 的前面。安装 Python 版本失败通常是缺少编译依赖,请参考 pyenv 文装或错误信息安装相应的依赖库。

6. 更高级的工具和下一步

  • Poetry / Pipenv: 除了 requirements.txt,还有更现代的依赖管理工具,如 Poetry 和 Pipenv。它们结合了依赖管理、虚拟环境创建和包发布的流程,使用 pyproject.toml 等文件管理项目元数据和依赖。
  • IDE 集成: 许多集成开发环境 (IDE),如 VS Code, PyCharm, Spyder 等,提供了强大的 Python 开发支持,包括自动检测和管理虚拟环境、调试、代码补全等功能。学习如何在您喜欢的 IDE 中配置和使用虚拟环境能极大提高开发效率。

结论

在 Ubuntu 上安装和配置 Python 是您 Python 编程之旅的第一步。我们探讨了多种方法,从简单的 APT 安装到灵活的源代码编译,再到强大的版本管理工具 pyenvconda

对于进行日常开发或管理多个项目的开发者而言,强烈推荐使用 pyenvconda 等版本管理器,并结合虚拟环境 (venvvirtualenv) 来安装和管理 Python 版本及项目依赖。 这种方法提供了最佳的隔离性、灵活性和安全性,让您能够轻松应对不同项目的需求,避免“依赖地狱”。

掌握了 Python 的安装、pip 的使用以及虚拟环境的配置,您就拥有了在 Ubuntu 系统上高效、稳定地进行 Python 开发所需的基础。现在,您可以自信地开始编写代码,探索 Python 的无限可能了!


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部