Python 现代开发学习笔记

(二)为项目建立 .venv

1. 一个项目使用一套依赖

假设两个项目需要不同版本的 HTTP 库。如果把包都安装到同一个环境,升级其中一个项目时,另一个项目也会使用升级后的包。可以给每个项目建立独立环境,把它的解释器入口和第三方包放在自己的 .venv 目录中。

venv 是 Python 标准库中的环境创建工具,.venv 是这里选用的环境目录名。 创建环境时调用前者,运行项目时使用后者。项目源代码放在 .venv 外面,环境可以根据依赖记录重新建立。

先建一个 reading-pip 文件夹,在其中执行:

# Windows:使用 Python 3.12 创建项目环境。
py -3.12 -m venv .venv
# 激活后,终端中的 python 优先指向当前环境。
.\.venv\Scripts\Activate.ps1
# 核对当前 python 的版本。
python --version

-m venv 表示把 venv 模块作为程序运行。模块可以先理解成一份可以导入或运行的 Python 工具代码。激活脚本会调整当前终端的命令查找路径,因此接下来输入 python 时,先找到 .venv 中的解释器入口。

macOS/Linux 的目录布局不同,对应命令如下:

# 使用已经安装的 Python 3.12 创建环境。
python3.12 -m venv .venv
# 读取激活脚本,使当前终端优先使用项目环境。
source .venv/bin/activate
python --version

退出环境时执行 deactivate。它恢复当前终端原先的命令查找设置,已经安装在 .venv 中的包仍然在那里。

2. 直接指定环境内的解释器

激活是一种让命令更短的方式。也可以直接选择解释器,不改变终端设置:

# Windows:直接使用项目环境运行文件。
.\.venv\Scripts\python.exe hello.py
# macOS/Linux 中,对应的解释器位置是 .venv/bin/python。

如果激活脚本没有运行,直接执行上面的解释器入口,同样能使用这个环境的包。接下来把这个入口交给 VS Code,让编辑器运行程序时也使用项目环境。

项目环境中的解释器与包

箭头表示程序使用哪一个环境。两个项目的源文件都在环境外面,各自导入各自 .venv 里的第三方包。

3. VS Code 自动识别与选择环境

用 VS Code 打开 reading-pip 整个文件夹,左侧就能同时看到源文件和 .venv。在扩展面板中安装 Microsoft 发布的 Python 和 Python Environments 扩展,再打开 hello.py。

可以先新建一个空的 reading-pip 文件夹,再通过“文件 → 打开文件夹”进入。左侧出现项目名后,后面创建的 hello.py 和 .venv 都放在这个目录中。

VS Code 打开空的 reading-pip 文件夹,左侧资源管理器显示项目根目录

Python Environments 会搜索工作区里的 .venv,并在自动选择时优先使用项目内的环境。先看窗口底部状态栏:环境名称中应包含 .venv,版本是 3.12.x。这里显示的就是编辑器准备使用的解释器。VS Code 环境管理

状态栏还显示系统 Python 或 3.13 时,可以主动切换:

  1. 按 Ctrl+Shift+P 打开命令面板;macOS 使用 Cmd+Shift+P。
  2. 输入并执行 Python: Select Interpreter,也可以直接点击状态栏中的 Python 版本。
  3. 选择当前项目的 .venv。Windows 的解释器入口是 .venv/Scripts/python.exe,macOS/Linux 则是 .venv/bin/python。
  4. 打开 hello.py,使用 Python 扩展的 Run Python File in Terminal(在终端中运行 Python 文件) 运行它。
点击状态栏后展开 Python 环境列表,项目内的 .venv 显示为推荐的项目环境

这里选择带有当前项目路径的 .venv。截图中的系统 Python 3.13 和项目 Python 3.12 同时存在;选择项目环境,程序就使用项目里的解释器。

选好环境后打开 hello.py,左侧能看到 .venv,右下角显示 .venv 和 Python 3.12.14

核对两处:左侧的 .venv 在当前项目中,右下角的环境名也包含 .venv。截图使用 Python 3.12.14,自己安装的 3.12 小版本可以不同。

这次选择会保留为项目的环境选择,代码补全、运行和调试也会使用它。刚建好的环境没有出现在列表中时,在命令面板执行 Python Environments: Refresh All Environment Managers,再重新选择。

4. 从编辑器创建 .venv

新项目也可以直接由 VS Code 创建环境。打开项目文件夹后,按 Ctrl+Shift+P 执行 Python: Create Environment,选择 Venv,再选择已经安装的 Python 3.12,环境目录采用 .venv。等待创建完成,再通过状态栏核对环境与版本。VS Code 创建环境教程

这与前面在终端创建环境达成相同目标:项目目录中得到一套独立的 Python 环境。项目已有 .venv 时,直接选择它即可;从 3.12 创建出的环境仍是 3.12,编辑器的自动识别不会把它升级到 3.13。

5. 新终端自动激活与配置

选好解释器后,关闭原来的集成终端,再通过 终端 → 新建终端 打开一个。扩展会自动执行所选环境的激活命令,此后在这个终端输入 python,就会找到项目 .venv 中的入口。终端提示符通常也会出现 (.venv)。

选择解释器和激活终端是两个动作。 前者决定编辑器用谁运行程序,后者调整终端查找 python 的路径。切换了解释器而旧终端仍在使用系统 Python 时,重开终端便能让新的选择生效。

VS Code 识别、选择并激活项目环境的过程

图中先识别项目环境,再选中解释器,最后让新终端执行激活。左侧的状态栏选择和右侧的终端命令最终指向同一个 .venv。

一般使用默认设置就能完成这些操作。想把默认环境位置明确写进项目时,可以在项目中建立 .vscode/settings.json。VS Code 的设置文件支持 // 注释,因此下面标记为 jsonc:

{
    // 首次为工作区确定解释器时,从项目的 .venv 目录寻找。
    "python.defaultInterpreterPath": "${workspaceFolder}/.venv"
}

${workspaceFolder} 表示当前打开的项目文件夹。把路径写到 .venv 目录即可,扩展会寻找对应系统下的解释器入口。defaultInterpreterPath 提供初始默认位置;已经选过解释器的项目,改用其他环境时仍通过 Python: Select Interpreter 操作。Python 设置说明

自动激活方式放在 用户设置 中调整。按 Ctrl+Shift+P 执行 Preferences: Open User Settings (JSON),在打开的设置对象中加入这一项:

{
    // 在新终端中执行所选环境的激活命令。
    "python-envs.terminal.autoActivationType": "command"
}

command 是默认方式,off 表示关闭自动激活。扩展从用户设置读取这一项;项目的 .vscode/settings.json 保存前面的环境位置。已有其他设置时,在同一个对象中增加字段即可。只使用 Python 扩展时,对应设置是 python.terminal.activateEnvironment,默认值为 true;安装 Python Environments 后使用它的激活配置。修改后重开终端。Python Environments 终端设置

在新终端执行前面的 python --version,输出应是 Python 3.12.x。再用本章“核对正在运行的环境”中的代码查看解释器路径:Windows 中应落在当前项目的 .venv/Scripts/,macOS/Linux 中应落在 .venv/bin/。版本与路径对应上后,就可以在这套环境中安装项目依赖。

笔记正文与全部题解 · Ctrl / ⌘ K