Python 虚拟环境全攻略:从创建到升级,一文带你掌握!
Python 虚拟环境全攻略创建、使用、管理及升级指南在所有让 Python 深受开发者喜爱的因素中丰富且不断扩展的第三方包选择至关重要。从数据摄取和格式化到高速数学运算和机器学习各类便捷工具包通过 import 语句或 pip install 命令即可获取。然而当包之间出现不兼容或不同 Python 项目需要同一插件的不同甚至冲突版本时Python 虚拟环境便能发挥作用。什么是 Python 虚拟环境虚拟环境是创建多个并行 Python 解释器实例的方法每个实例有不同的包集合和配置。每个虚拟环境包含独立的 Python 解释器副本及支持工具如包管理器 pip的副本。在每个虚拟环境中安装的包只能在该环境中被访问其他环境无法看到。即便依赖特定平台二进制文件的大型复杂包也能在虚拟环境中相互隔离。为什么要使用 Python 虚拟环境虚拟环境有几个常见使用场景- **项目依赖不同版本的包**开发多个依赖同一包不同版本的项目或某个项目需与某些包隔离以避免命名空间冲突这是最常见的使用场景。- **无法修改系统包目录**在无法修改 site-packages 目录的 Python 环境中工作比如处于高度受控环境如托管主机或在服务器上因生产要求无法更改解释器或其中使用的包。- **进行特定包组合的实验**想在高度受控环境下尝试特定包组合例如测试跨兼容性或向后兼容性。- **运行纯净的 Python 解释器**希望在没有第三方包的系统上运行 Python 解释器的“基准”版本并根据需要为每个项目单独安装第三方包。虽然可以将 Python 库解压缩到项目子文件夹使用或下载独立的 Python 解释器副本并在特定文件夹运行脚本和包但管理这样拼凑的项目会很快变得困难。从长远看最好的解决方案是使用 Python 的原生机制来创建、复制和使用虚拟环境。在 Python 3 中使用虚拟环境Python 有用于创建虚拟环境的原生工具使整个过程相当简单。目前所有受支持的 Python 版本都使用原生虚拟环境工具 venv。创建 Python 虚拟环境要在指定目录创建虚拟环境在命令行输入bashpython3 -m venv /path/to/venv例如在当前目录下创建名为 .venv 的虚拟环境可使用命令bashpython3 -m venv .venv在 Microsoft Windows 系统中可用 py 代替 python3 确保访问已安装的 Python 版本。虚拟环境目录名称可任意选择通常使用 .venv。设置虚拟环境可能需一到两分钟。完成后该目录下会有几个子目录最重要的是 Unix 系统上的 bin 目录或 Windows 系统上的 Scripts 目录这里包含虚拟环境的 Python 解释器及其工具。需注意每个虚拟环境包含自己的 Python 解释器副本可能占用较大磁盘空间。一个 Python 3.13 虚拟环境根据操作系统不同可能占用 14MB 到 26MB 的磁盘空间。虚拟环境与版本控制若在使用版本控制系统如 Git管理的项目目录中设置虚拟环境创建虚拟环境并进行任何提交前应将环境目录排除在版本控制之外。虚拟环境不应与相关代码一起进行版本控制因为它们可根据需要销毁和重新创建。不过应将项目相关的 requirements.txt 或 pyproject.toml 文件进行版本控制这些文件用于描述在虚拟环境中安装的内容。激活 Python 虚拟环境使用虚拟环境前需显式激活它。激活后虚拟环境将成为当前 shell 会话的默认 Python 解释器。根据不同操作系统和命令 shell激活虚拟环境的语法不同- **Unix 或 MacOSbash shell**bashsource /path/to/venv/bin/activate- **Unix 或 MacOScsh shell**bashsource /path/to/venv/bin/activate.csh- **Unix 或 MacOSfish shell**bashsource /path/to/venv/bin/activate.fish- **WindowsCommand Prompt**bashpath/to/venv/Scripts/Activate.bat- **WindowsPowerShell**bashpath/to/venv/Scripts/Activate.ps1需注意激活的环境只在激活它的上下文中有效。例如启动两个 PowerShell 实例 A 和 B在实例 A 中激活虚拟环境该环境只适用于 A不适用于 B。许多 Python IDE 会自动检测并激活当前项目目录中的虚拟环境。如启用 Python 扩展时Visual Studio Code 可做到这一点在其中打开终端会自动激活所选的虚拟环境。PyCharm 会为每个新项目自动创建并启用虚拟环境。配置和使用 Python 虚拟环境激活新的虚拟环境后可使用 pip 包管理器添加和更改环境中的包。在 Windows 系统中pip 位于虚拟环境的 Scripts 子目录中在 Unix 系统中它位于 bin 子目录中。熟悉 pip 使用方法的话在虚拟环境中使用它应没问题。只需确保使用的是在激活的上下文中管理虚拟环境包的 pip 实例如在 bash 会话或 Windows CLI/PowerShell 会话中。若想验证是否使用了正确的 pip 和虚拟环境可输入 pip -V 并检查显示的路径是否指向虚拟环境的子目录。想在虚拟环境中升级 pip 时最好使用命令 python3 -m pip install -U pip确保升级过程不会锁定 Python 的关键文件。而命令 pip install -U pip 可能无法正确完成升级。要使用创建的虚拟环境运行 Python 脚本在激活环境的上下文中从命令行调用 Python 即可。例如运行脚本可使用 python3 myscript.py。在 PyCharm 中可使用 IDE 自己的包管理界面来管理项目中安装的包。管理 Python 虚拟环境中的包创建新的虚拟环境时pip 会自动安装但仅此而已。需安装想在环境中使用的其他包。对于有复杂需求的项目通常在项目根目录下保留一个 requirements.txt 文件列出项目的依赖项。这样若需重新创建虚拟环境可使用命令 pip install -r requirements.txt 重新安装所有需要的包。最近Python 项目出现新的项目元数据格式 pyproject.toml。pyproject.toml 文件包含项目的包依赖项及大量其他相关信息。要安装这些依赖项可在 pyproject.toml 文件所在的目录中运行 pip install .。需注意虚拟环境中的 pip 副本是该环境独有的。每个虚拟环境都有自己的副本需独立更新和维护。这就是为何在某些虚拟环境中会收到 pip 过时的警告而在其他环境中却没有的原因。每个虚拟环境中的 pip 都需单独更新。停用 Python 虚拟环境使用完虚拟环境后可简单终止使用它的会话。若想在同一会话中继续工作但使用默认的 Python 解释器可在命令提示符下输入 deactivate。Windows 用户在 Command Prompt 中需从 Scripts 子目录运行 deactivate.bat而 Unix 用户和使用 PowerShell 的 Windows 用户可在任何目录中直接输入 deactivate。删除 Python 虚拟环境虚拟环境是自包含的。不再需要虚拟环境时只需删除其目录但要确保先关闭所有使用该虚拟环境的 Python 进程。若想刷新或重新创建虚拟环境可简单删除当前环境目录然后按上述方法重新创建见“管理 Python 虚拟环境中的包”。这通常是将项目升级到较新版本 Python 的最简单方法删除或临时重命名 venv 目录以防新版本不兼容然后创建一个新的并安装项目依赖项。若有许多不再使用的旧项目可删除它们的虚拟环境以节省空间。需要时可轻松重新创建但需记录创建它们时使用的 Python 版本以及所需的包通常记录在 requirements.txt 或 pyproject.toml 中。迁移 Python 虚拟环境不要试图将虚拟环境与其项目一起复制和移动。虚拟环境与创建它们的系统上的 Python 安装位置相关联。若想将项目迁移到另一个系统不要复制 venv 目录而是在目标机器上重新创建虚拟环境。不过要将 requirements.txt 或 pyproject.toml 文件与项目一起复制和移动因为这些文件是在其他系统上重新创建虚拟环境所必需的。在 Python 2 中使用虚拟环境在 Python 2 中虚拟环境不是语言的原生特性。需安装第三方库来创建和管理虚拟环境。最流行和广泛使用的项目是 virtualenv它负责创建目录结构并将所需文件复制到虚拟环境中。要安装 virtualenv只需使用 pip install virtualenv。要使用它创建虚拟环境目录可输入 virtualenv /path/to/directory。激活和停用虚拟环境的方法与 Python 3 中的虚拟环境相同见上文。需注意不建议在任何新开发中使用 Python 2。Python 2 中的虚拟环境就像 Python 2 本身一样只应用于维护最终应迁移到 Python 3 的遗留项目。虚拟环境与 Python 主包目录通常创建 venv 时它无法使用创建它的 Python 安装中已有的包。这是有意为之以确保全局安装的包不会干扰本地包。不过可在首次创建虚拟环境时覆盖此行为。若在运行 venv 时传递 --system-site-packages 标志创建的 venv 将可以访问父 Python 的包目录。在 Jupyter Notebook 中使用 Python 虚拟环境若正在使用 Jupyter Notebook又名 IPython Notebook且已在系统范围内安装了 Jupyter先创建并激活虚拟环境。然后从虚拟环境目录中运行 pip install ipykernel 以添加 IPython 所需的组件。最后运行 ipython kernel install --user --name其中 是想与该特定项目关联的名称。之后应能启动 Jupyter 并切换到在虚拟环境中安装的 IPython 内核。升级 Python 虚拟环境在系统上升级 Python 运行时使用该版本 Python 的虚拟环境不会自动升级需手动操作。这是有意设计的因为不经意地升级 Python 版本可能会破坏相关的包。若对现有的 Python 解释器进行小版本升级例如从 Python 3.13.1 升级到 Python 3.13.3可轻松升级相应的虚拟环境。在项目目录的命令提示符下输入bashpython -m venv /path/to/venv --upgrade升级前不要激活虚拟环境否则升级可能无法正常工作。或者如上文所述见“删除 Python 虚拟环境”可选择完全删除 venv 并使用 requirements.txt 或 pyproject.toml 文件重新创建它。若安装了 Python 的主要新版本例如已有 Python 3.10现在又安装了 Python 3.11则需要创建一个专门使用新主要版本的新虚拟环境。不要尝试将现有的虚拟环境升级到更高的主要版本 Python。