---
title: "用 venv 隔离项目依赖：创建、激活、导出 requirements - Angryecho"
description: "准备工作 已安装 Python 3；终端执行 python3 --version 有输出。 依据：Python 官方文档 venv —— Creation of virtual environments。[1] 核实日期：2026-10-24。"
canonical_url: "https://www.angryecho.com/c/Python/p/P2TBBjZwaN02CMt7tlYPF"
meta:
  "og:description": "准备工作 已安装 Python 3；终端执行 python3 --version 有输出。 依据：Python 官方文档 venv —— Creation of virtual environments。[1] 核实日期：2026-10-24。"
  "og:image": "https://www.angryecho.com/_og/d/c_Post%2Ctitle_~5ZCQ5qe9572R%2Cdescription_~5ZCQ5qe95LiA5LiL77yM5bCx5LiK5ZCQ5qe9572R44CC%2CpostId_P2TBBjZwaN02CMt7tlYPF%2Crevision_~MjAyNi0xMC0yN1QwMjo1Nzo0OS4yMjMzNTBa%2Cp_Ii9jL1B5dGhvbi9wL1AyVEJCalp3YU4wMkNNdDd0bFlQRiI%2Cs_rYzh-aVum68xypBm.png"
  "og:image:height": "630"
  "og:image:type": image/png
  "og:image:width": "1200"
  "og:title": "用 venv 隔离项目依赖：创建、激活、导出 requirements"
---

> Index of every page on this site: [llms.txt](https://www.angryecho.com/llms.txt)

# **用 venv 隔离项目依赖：创建、激活、导出 requirements**

## 准备工作

- 已安装 Python 3；终端执行 `python3 --version` 有输出。
- 依据：Python 官方文档 `venv` —— Creation of virtual environments。\[1]
- 核实日期：2026-10-24。

## 操作步骤

### 1、在项目目录创建虚拟环境

做什么：进入项目根目录后执行：

```bash
python3 -m venv .venv
```

为什么：`venv` 会在目录内创建一套独立的解释器与 site-packages，避免把项目依赖装进系统 Python，也减少多项目之间的版本互相踩踏。\[1]

怎么确认：出现 `.venv/`；macOS/Linux 下存在 `.venv/bin/python`，Windows 下存在 `.venv\Scripts\python.exe`；对该解释器执行 `.venv/bin/python -c "import sys; print(sys.prefix)"` 应指向 `.venv`。

### 2、激活后再升级 pip 并安装依赖

做什么：

```bash
source .venv/bin/activate   # macOS/Linux
# Windows CMD: .venv\Scripts\activate.bat
# Windows PowerShell: .venv\Scripts\Activate.ps1
python -m pip install -U pip
pip install requests
```

为什么：激活会把虚拟环境的 `bin`/`Scripts` 放到 `PATH` 前面，此后 `python` 与 `pip` 默认指向环境内工具。未激活时很容易把包装到用户目录或系统目录，造成“我装了但运行时找不到”。\[1]

怎么确认：`which python`（Windows 用 `where python`）指向 `.venv`；`python -m pip show requests` 能显示包信息且 Location 落在 `.venv` 下。

### 3、导出依赖并在新环境复现

做什么：

```bash
pip freeze > requirements.txt
# 另一台机器或干净目录：
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
```

为什么：`freeze` 记录当前环境已安装发行版及版本，便于协作与 CI 复现。官方把 venv 定位为轻量隔离，不替代完整打包工具，但对多数应用项目足够。\[1]

怎么确认：新环境 `pip list` 主要版本与原环境一致；`python -c "import requests; print(requests.__version__)"` 无报错。

### 4、退出与删除（可选）

做什么：`deactivate` 退出激活；确认无进程占用后可删除整个 `.venv/` 目录重建。

为什么：虚拟环境是目录级隔离，删掉即移除；比清理系统 site-packages 安全得多。\[1]

怎么确认：`deactivate` 后 `which python` 不再指向 `.venv`；删除目录后原路径不存在。

虚拟环境解决的是“同一台机器上多个项目抢同一套全局 site-packages”的老问题。官方文档把它定位成标准库自带的轻量方案：不替代完整的打包发布流程，但足够让日常开发把依赖边界画清楚。

激活只是改当前 shell 的 PATH；关掉终端或执行 deactivate 后，系统又回到原来的解释器。所以写自动化脚本时，更稳妥的做法是直接调用 `.venv/bin/python -m pip`，不依赖“人是否点过激活”。

若你在 CI 里使用 venv，通常的顺序是：创建 → 升级 pip → 安装 requirements → 跑测试。把这四步写进同一 job，比在宿主机全局装包更容易复现失败现场。

## 注意事项

- 不要把 `.venv/` 提交进 Git；提交 `requirements.txt`（或你们选定的锁文件）即可。
- 某些 Linux 发行版限制系统 pip，优先始终在 venv 内用 `python -m pip`。
- 需要更严哈希锁定时，再考虑 pip-tools / uv / poetry 等；本教程只覆盖标准库 venv。

## 来源

> \[1] Python Docs · venv — Creation of virtual environments · https://docs.python.org/3/library/venv.html · 核实于 2026-10-24

#Python #venv #虚拟环境 #pip #教程

排序方式 :

### **成为第一条评论！**

Nobody's responded to this post yet. Add your thoughts and get the conversation going.

```json
{"@context":"https://schema.org","@graph":[{"@id":"https://www.angryecho.com/c/Python/p/P2TBBjZwaN02CMt7tlYPF#post","@type":"DiscussionForumPosting","commentCount":0,"dateModified":"2026-10-27T02:57:49.223Z","datePublished":"2026-10-24T04:00:00.000Z","description":"准备工作 已安装 Python 3；终端执行 python3 --version 有输出。 依据：Python 官方文档 venv —— Creation of virtual environments。[1] 核实日期：2026-10-24。","headline":"用 venv 隔离项目依赖：创建、激活、导出 requirements","isPartOf":"https://www.angryecho.com/c/Python","mainEntityOfPage":"https://www.angryecho.com/c/Python/p/P2TBBjZwaN02CMt7tlYPF","text":"准备工作\n\n\n\n\n\n已安装 Python 3；终端执行 python3 --version 有输出。\n\n\n\n依据：Python 官方文档 venv —— Creation of virtual environments。[1]\n\n\n\n核实日期：2026-10-24。\n\n操作步骤\n\n1、在项目目录创建虚拟环境\n\n做什么：进入项目根目录后执行：\n\npython3 -m venv .venv\n\n为什么：venv 会在目录内创建一套独立的解释器与 site-packages，避免把项目依赖装进系统 Python，也减少多项目之间的版本互相踩踏。[1]\n\n怎么确认：出现 .venv/；macOS/Linux 下存在 .venv/bin/python，Windows 下存在 .venv\\Scripts\\python.exe；对该解释器执行  .venv/bin/python -c \"import sys; print(sys.prefix)\" 应指向 .venv。\n\n2、激活后再升级 pip 并安装依赖\n\n做什么：\n\nsource .venv/bin/activate   # macOS/Linux\n# Windows CMD: .venv\\Scripts\\activate.bat\n# Windows PowerShell: .venv\\Scripts\\Activate.ps1\npython -m pip install -U pip\npip install requests\n\n为什么：激活会把虚拟环境的 bin/Scripts 放到 PATH 前面，此后 python 与 pip 默认指向环境内工具。未激活时很容易把包装到用户目录或系统目录，造成“我装了但运行时找不到”。[1]\n\n怎么确认：which python（Windows 用 where python）指向 .venv；python -m pip show requests 能显示包信息且 Location 落在 .venv 下。\n\n3、导出依赖并在新环境复现\n\n做什么：\n\npip freeze > requirements.txt\n# 另一台机器或干净目录：\npython3 -m venv .venv\nsource .venv/bin/activate\npip install -r requirements.txt\n\n为什么：freeze 记录当前环境已安装发行版及版本，便于协作与 CI 复现。官方把 venv 定位为轻量隔离，不替代完整打包工具，但对多数应用项目足够。[1]\n\n怎么确认：新环境 pip list 主要版本与原环境一致；python -c \"import requests; print(requests.__version__)\" 无报错。\n\n4、退出与删除（可选）\n\n做什么：deactivate 退出激活；确认无进程占用后可删除整个 .venv/ 目录重建。\n\n为什么：虚拟环境是目录级隔离，删掉即移除；比清理系统 site-packages 安全得多。[1]\n\n怎么确认：deactivate 后 which python 不再指向 .venv；删除目录后原路径不存在。\n\n虚拟环境解决的是“同一台机器上多个项目抢同一套全局 site-packages”的老问题。官方文档把它定位成标准库自带的轻量方案：不替代完整的打包发布流程，但足够让日常开发把依赖边界画清楚。\n\n激活只是改当前 shell 的 PATH；关掉终端或执行 deactivate 后，系统又回到原来的解释器。所以写自动化脚本时，更稳妥的做法是直接调用 .venv/bin/python -m pip，不依赖“人是否点过激活”。\n\n若你在 CI 里使用 venv，通常的顺序是：创建 → 升级 pip → 安装 requirements → 跑测试。把这四步写进同一 job，比在宿主机全局装包更容易复现失败现场。\n\n注意事项\n\n\n\n\n\n不要把 .venv/ 提交进 Git；提交 requirements.txt（或你们选定的锁文件）即可。\n\n\n\n某些 Linux 发行版限制系统 pip，优先始终在 venv 内用 python -m pip。\n\n\n\n需要更严哈希锁定时，再考虑 pip-tools / uv / poetry 等；本教程只覆盖标准库 venv。\n\n来源\n\n\n\n[1] Python Docs · venv — Creation of virtual environments · https://docs.python.org/3/library/venv.html · 核实于 2026-10-24\n\n#Python #venv #虚拟环境 #pip #教程","url":"https://www.angryecho.com/c/Python/p/P2TBBjZwaN02CMt7tlYPF","author":{"@type":"Person","name":"duckduckgo","url":"https://www.angryecho.com/u/H8Sduckduckgo"},"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":0},{"@type":"InteractionCounter","interactionType":"https://schema.org/DislikeAction","userInteractionCount":0},{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":0},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":0}]}]}
```

## Sitemap

See the full [sitemap](https://www.angryecho.com/sitemap.md) for all pages.
