在 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 提供了:
- 稳定的基础环境: Ubuntu 长期支持版本 (LTS) 提供多年的安全更新和维护,为开发项目提供可靠的基础。
- 便捷的包管理:
apt
包管理器可以轻松安装 Python 及其许多库的系统级版本。 - 强大的命令行工具: Linux 环境下的各种命令行工具能与 Python 脚本高效协同工作。
- 广泛的社区支持: 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.10
或 Python 3.10.12
这样的输出,这取决于您的 Ubuntu 版本。
理解 python
和 python3
命令:
在较新的 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 版本相匹配,相对稳定,但可能不是最新的。
安装步骤:
-
更新软件包列表: 这是安装任何新软件前的良好习惯,确保您能下载到最新版本的软件包信息。
bash
sudo apt update这个命令会从 Ubuntu 软件源下载最新的软件包列表,但不会安装或升级任何软件。
-
安装 Python 3: Ubuntu 大多数现代版本都已经预装 Python 3,但如果没有或者您想确保安装了完整的开发组件,可以使用此命令。
bash
sudo apt install python3如果您还需要 Python 的开发头文件(例如,当您需要编译某些 Python 库时),可以安装
python3-dev
:bash
sudo apt install python3-dev -
验证安装:
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 为例):
-
添加 deadsnakes PPA:
bash
sudo add-apt-repository ppa:deadsnakes/ppa系统可能会提示您按 Enter 确认添加。
-
更新软件包列表: 添加新的 PPA 后,需要再次更新软件包列表。
bash
sudo apt update -
安装特定版本的 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
。 -
验证安装:
bash
python3.9 --version
优点:
- 提供较新的 Python 版本: 比官方仓库版本新,但通常不是最新的。
- 方便安装特定版本: 可以安装官方仓库没有的多个版本。
- 仍然使用 APT 进行管理: 安装、升级和卸载相对方便。
缺点:
- 非官方源: PPA 由第三方维护,虽然 deadsnakes PPA 比较有名和可靠,但理论上存在风险。
- 可能与其他 PPA 冲突: 虽然不常见,但有可能发生。
- 版本切换仍然需要手动管理: 比如修改 PATH 或使用软链接,不如版本管理器方便。
2.3 从源代码编译安装
从源代码编译安装 Python 提供了最大的灵活性,您可以安装任何版本(包括最新的 pre-release 版本),并可以配置编译选项。然而,这是最复杂的方法,需要安装编译工具和依赖库。
安装步骤(以安装 Python 3.12 为例):
-
安装编译依赖: 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 -
下载 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
“` -
解压源代码:
bash
tar -xf Python-3.12.0.tgz
cd Python-3.12.0/ -
配置编译选项: 运行
./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
“`
-
编译源代码:
make
命令会编译 Python。-j
选项可以指定并行编译的进程数,通常设置为您的 CPU 核心数可以加快速度。bash
make -j$(nproc) -
安装 Python: 强烈建议使用
make altinstall
而不是make install
。make install
会创建python3
、pip3
等命令的软链接,可能覆盖系统默认命令。make altinstall
只会安装版本化的可执行文件(如python3.12
),不会创建python3
等非版本化链接。“`bash
如果配置时使用了 –prefix
sudo make altinstall
如果没有使用 –prefix,但使用了 altinstall
sudo make altinstall
``
–prefix
*注意:* 如果您使用了将 Python 安装到用户目录(如
~/opt/python/3.12),则安装时无需
sudo:
make altinstall`。 -
验证安装: 检查新安装的 Python 版本。如果使用了
altinstall
,命令会包含版本号。“`bash
/opt/python/3.12/bin/python3.12 –version或者如果在默认位置安装但使用了 altinstall
python3.12 –version
“`
优点:
- 极致的灵活性: 可以安装任何版本,自定义编译选项。
- 最新版本: 可以第一时间使用最新的 Python 功能。
- 完全独立: 安装在指定位置,不会干扰系统 Python(如果正确使用
--prefix
和altinstall
)。
缺点:
- 复杂且耗时: 需要手动下载、解压、配置、编译和安装,过程较长,容易出错。
- 依赖管理困难: 需要手动安装所有编译依赖。
- 更新和卸载麻烦: 更新到新版本需要重复整个过程,卸载也需要手动删除文件。
- 不适合频繁切换版本: 每次切换或安装新版本都很麻烦。
2.4 使用 Python 版本管理器 (推荐用于开发)
对于进行多个项目开发、需要使用不同 Python 版本或者需要频繁切换版本的开发者来说,使用 Python 版本管理器是最推荐的方式。它们可以在用户级别安装和管理多个 Python 版本,并且可以轻松地在不同的项目目录或全局范围内切换所需的 Python 版本,而不会干扰系统。其中最流行的是 pyenv
和基于 Anaconda/Miniconda 的环境管理器。
使用 pyenv
安装和管理 Python (强烈推荐)
pyenv
是一个简单、强大的 Python 版本管理工具。它通过修改 PATH 环境变量,在运行时动态切换 Python 版本。
安装步骤:
-
安装 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 -
安装 pyenv: 可以通过
curl
脚本或直接从 GitHub 克隆仓库安装。推荐使用pyenv-installer
脚本,它还会安装一些有用的插件。bash
curl https://pyenv.run | bash -
配置 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` 与虚拟环境的集成。 -
重新加载 shell 配置: 使配置生效,无需关闭终端。
“`bash
source ~/.bashrc # 如果您修改的是 ~/.bashrc或者 source ~/.zshrc 如果您使用 Zsh
“`
-
验证 pyenv 安装:
bash
pyenv --version
使用 pyenv 安装 Python 版本:
-
查看可安装版本:
pyenv
可以列出它可以安装的所有 Python 版本。bash
pyenv install --list
列表会很长,包括 CPython (官方版本), Miniconda, Anaconda, Jython, PyPy 等。 -
安装指定版本: 选择一个您需要的版本进行安装。
pyenv
会下载源代码并编译安装到~/.pyenv/versions
目录下。bash
pyenv install 3.10.12 # 安装 CPython 3.10.12
pyenv install 3.12.0 # 安装 CPython 3.12.0
这个过程可能需要一些时间,取决于您的网络速度和计算机性能。 -
查看已安装版本:
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
目录时,python
或python3
命令就会指向 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 为例):
-
下载安装脚本: 访问 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
“` -
运行安装脚本:
bash
bash Miniconda3-latest-Linux-x86_64.sh
阅读许可协议,按 Enter 接受,然后按照提示操作。安装程序会询问安装位置(默认为用户主目录下的miniconda3
或anaconda3
),以及是否将 conda 初始化添加到您的 shell 配置文件中。选择 “yes” 进行初始化。 -
重新加载 shell 配置: 使配置生效。
bash
source ~/.bashrc # 或 ~/.zshrc -
验证安装:
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 相对较小。
- 独立的包管理器: 需要同时使用
conda
和pip
(虽然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
。 - 如果您使用
pyenv
或conda
安装 Python 版本,pip
通常会随该版本一起安装并配置好。
验证 pip 安装:
确保您使用的 pip
是与您当前激活或希望使用的 Python 版本相关联的。在使用 pyenv
或激活虚拟环境时,直接运行 pip
或 pip3
命令即可。
“`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 myenv
或 python3 -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
。
-
安装 virtualenv:
virtualenv
本身是一个 Python 包,需要使用pip
安装到全局环境(或者您选择的某个基础环境中)。bash
pip install virtualenv
注意: 这是少数可以使用pip install
安装到全局的工具之一,因为virtualenv
本身就是一个命令行工具,通常不依赖特定项目。但如果可能,最好将其安装在某个稳定的基础环境中(例如使用pyenv
安装一个基础 Python 版本,并在该版本下安装virtualenv
)。或者,如果您使用的是pyenv
,可以直接通过pyenv install virtualenv
命令来安装。 -
创建虚拟环境:
“`bash
virtualenv myenv_virt或者指定 Python 版本(如果系统中安装了多个版本或使用了 pyenv)
virtualenv -p /usr/bin/python3.9 myenv_virt
或使用 pyenv 安装的版本
virtualenv -p $(pyenv which python3.10) myenv_virt
“`
-
激活和停用: 激活和停用方式与
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 环境变量有助于理解系统如何找到您输入的命令(包括 python
和 pip
)。当您在终端输入一个命令时,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
目录。这样,当您输入python
或pip
时,shell 会优先在虚拟环境的bin
目录中查找并执行相应的虚拟环境专属的可执行文件。
配置 PATH (通常不需要手动,除非特定情况):
如果您从源代码安装到非标准位置,或者需要将某个特定版本的 Python 加入 PATH,可以编辑您的 shell 配置文件(如 ~/.bashrc
),添加类似以下行:
bash
export PATH="/path/to/your/python/bin:$PATH"
然后运行 source ~/.bashrc
使更改生效。但如前所述,使用 pyenv
或虚拟环境是更推荐的 PATH 管理方式。
5. 常见问题与故障排除
command not found: python
或command 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 versions
和which 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 安装到灵活的源代码编译,再到强大的版本管理工具 pyenv
和 conda
。
对于进行日常开发或管理多个项目的开发者而言,强烈推荐使用 pyenv
或 conda
等版本管理器,并结合虚拟环境 (venv
或 virtualenv
) 来安装和管理 Python 版本及项目依赖。 这种方法提供了最佳的隔离性、灵活性和安全性,让您能够轻松应对不同项目的需求,避免“依赖地狱”。
掌握了 Python 的安装、pip
的使用以及虚拟环境的配置,您就拥有了在 Ubuntu 系统上高效、稳定地进行 Python 开发所需的基础。现在,您可以自信地开始编写代码,探索 Python 的无限可能了!