P01第 1 / 1 课时未开始内容版本 1.0.0 · 核验于 2026-10-26

Python 环境与项目

Python 环境与项目 · 阅读后完成下方实验与检查题,再用「标记完成」记录进度。

学习目标

写 Python 之前先把地基打对:这一课的目标是给一个项目建出隔离环境、装好依赖、跑通入口程序,并且能回答「我刚才装的包到底去哪了」。

问题场景

你在 GitHub 上找了个课程数据统计脚本,兴冲冲 python main.py,报 ModuleNotFoundError: No module named 'requests'。装上 requests 又把另一个项目的依赖搞乱了。这就是没做环境隔离——所有包都挤在同一个全局 Python 里。

Node 这边你早有体感:npm install 生成 node_modules,依赖跟着项目走。Python 的等价物是 venv,只是它默认不帮你建。

核心解释

venv 做的事很朴素:在项目里复制出一份独立的解释器入口和 site-packages,之后激活它,python 和 pip 都指向这份副本,装什么卸什么都不影响系统。

# 在项目根目录创建虚拟环境(目录名惯例用 .venv)
python -m venv .venv

# 激活:Windows PowerShell 用 .venv\Scripts\Activate.ps1,bash 用下面这条
source .venv/Scripts/activate     # macOS/Linux 是 source .venv/bin/activate

python -m pip install fastapi uvicorn
pip freeze > requirements.txt     # 记录当前环境所有包及精确版本

三个容易混的概念,用一句话钉死:

  1. 解释器是 python.exe 本体,sys.executable 能看到它的完整路径。
  2. 环境是「解释器 + 一份独立的包目录」,venv 不是第二个 Python,只是给同一个解释器配了独立的包安装位置。
  3. 包安装位置看 pip show fastapi 的 Location 字段,激活环境前后对比,路径会从全局 site-packages 变成 .venv 里。

python -m pip 比 pip 更可靠:它保证 pip 装到「当前 python 对应的环境」里,避免 PATH 里多个 Python 时装错地方。这和 Node 里 npm 必须匹配当前项目目录是一个道理。

示例拆解

建一个最小入口程序验证环境是通的不是摆设:

# main.py
import sys
import fastapi

def main() -> None:
    print("解释器:", sys.executable)
    print("环境前缀:", sys.prefix)      # 指向 .venv 说明已激活
    print("fastapi 版本:", fastapi.__version__)

if __name__ == "__main__":
    main()

预期流程:激活环境后运行 python main.py,sys.prefix 指向 .venv 目录;删掉环境重建,pip install -r requirements.txt 后脚本输出完全一致——这就是「可重现」的验证标准。ReactLab 的 Python 代码执行走的就是本机解释器,你在本站练习时用 python main.py 直接跑,同样受这套环境管理约束。

动手任务

  1. 新建 playground 目录,创建并激活 venv,安装 fastapi,运行 pip show fastapi 记下 Location 路径。
  2. 生成 requirements.txt,删除 .venv 后重建环境并 pip install -r requirements.txt,验证 python -c "import fastapi" 成功。
  3. 故意不激活环境直接运行 pip show fastapi,观察 Location 变化,确认你真的分清了两个位置。

常见错误

  • 装完包 import 报错:八成是环境没激活或开了新终端,先看 sys.prefix 再抱怨。
  • 把依赖记在脑子里:没写 requirements.txt,换台电脑或重建环境就断档;版本号要固定,别只写包名。
  • 用全局 Python 装项目依赖:短期省事,长期必然版本冲突;每个项目一个 venv 是硬惯例。
  • 混淆 python 和 python3:Windows 上通常是 py 或 python,以 python -m pip --version 的输出为准。

检查与复盘

自查清单:

  • 能不看资料创建、激活、退出 venv,并说清激活前后 pip 的区别
  • requirements.txt 里每行都能解释是什么(包名 + 精确版本)
  • 被问「包装哪了」时能用 sys.prefix 和 pip show 给出证据

参考资料

检查题共 1 题,提交后立即显示解析
答案由服务端判定;答错的题会自动进入复习计划。
Q1单选简单

同事的项目依赖 requests==2.31.0,你的另一个项目需要 requests==2.28.0。都装在系统 Python 里会互相覆盖。正确的基础做法是?

读完这一课了?

标记完成后,工作台会安排接下来的学习。

Command Palette

Search for a command to run...