Python 虚拟环境:别再把所有项目塞进一个"大仓库"了

Python 虚拟环境:别再把所有项目塞进一个"大仓库"了

你有没有遇到过这种情况:

项目 A 用的是 Django 2.0,项目 B 用的是 Django 4.0。你在项目 B 里 pip install django==4.0,结果项目 A 启动就报错。改回去呢,项目 B 又跑不起来。

这就是典型的"依赖冲突"------所有项目共用一套全局 Python 环境,不同项目对同一个库的不同版本要求互相打架。

虚拟环境解决的就是这个问题:每个项目有自己的独立环境,各用各的版本,互不干扰。

虚拟环境是什么?打个比方

把你电脑上的 Python 想象成一个"公共图书馆"(全局环境)。所有项目都从这个图书馆借书(第三方库)。

  • 项目 A 要借 Django 2.0
  • 项目 B 要借 Django 4.0
  • 图书馆里只能放一个版本的书

虚拟环境就是给每个项目盖了一个独立的"小书房"------项目 A 的书房里有 Django 2.0,项目 B 的书房里有 Django 4.0,互不影响。

css 复制代码
全局 Python 环境(系统)
├── 项目 A 的虚拟环境
│   ├── Django 2.0
│   └── requests 2.28
└── 项目 B 的虚拟环境
    ├── Django 4.0
    └── numpy 1.24

核心好处:

  • 每个项目的依赖互不干扰
  • 系统 Python 环境保持干净
  • 通过 requirements.txt 可以一键复现环境
  • 不同项目可以用不同 Python 版本

核心工具:venv(Python 3.3+ 自带,不用装)

venv 是 Python 官方自带的虚拟环境工具,最轻量、最通用、最适合新手。不需要额外安装,直接用。

1. 创建虚拟环境

bash 复制代码
cd my_project
python -m venv .venv

.venv 是虚拟环境的目录名,可以改成别的(比如 venv、env),但 .venv 是常见惯例------以点开头在 Linux/Mac 上是隐藏目录,不容易误删。

2. 激活虚拟环境

激活之后,命令行前面会出现 (.venv) 提示,表示你现在在这个虚拟环境里工作。

系统 激活命令
macOS / Linux source .venv/bin/activate
Windows CMD .venv\Scripts\activate.bat
Windows PowerShell .venv\Scripts\Activate.ps1

验证激活成功:

bash 复制代码
which python   # 应该显示 .venv/bin/python,不是系统 Python
pip list       # 应该只有 pip 和 setuptools,干净的

3. 安装依赖

激活后,pip install 的包都装到这个虚拟环境里,不会污染全局。

bash 复制代码
pip install django requests

4. 退出虚拟环境

bash 复制代码
deactivate

5. 删除虚拟环境

直接把 .venv 文件夹删掉就行,不影响任何东西。

bash 复制代码
rm -rf .venv   # macOS/Linux
rmdir /s .venv # Windows

依赖管理:requirements.txt

虚拟环境能让依赖不冲突,但如果你换了一台电脑,怎么把同样的环境复现出来?

导出依赖:

bash 复制代码
pip freeze > requirements.txt

生成的 requirements.txt 长这样:

ini 复制代码
Django==4.2.0
requests==2.31.0
numpy==1.24.3

在新电脑上安装:

bash 复制代码
pip install -r requirements.txt

一个关键区分:

  • pip freeze:导出当前环境所有已安装的包(包括间接依赖)
  • pip list:列出当前环境所有包(不带版本号约束)

requirements.txt 一般提交到 Git,.venv 文件夹不提交(加 .gitignore)。

.gitignore 里加这几行:

bash 复制代码
.venv/
venv/
env/
__pycache__/
*.pyc

IDE 集成:不用手动敲命令

VS Code:

  1. 打开项目文件夹
  2. 按 Cmd+Shift+P(Mac)或 Ctrl+Shift+P(Windows)
  3. 输入 Python: Select Interpreter
  4. 选择 .venv 目录下的 Python 解释器

VS Code 会自动在终端里激活虚拟环境。

PyCharm:

新建项目时选 "New environment using Virtualenv",PyCharm 自动创建并激活。

现有项目在 Settings → Project → Python Interpreter 里添加 .venv 解释器。

标准工作流

bash 复制代码
# 1. 新建项目
mkdir my_project && cd my_project

# 2. 创建虚拟环境
python -m venv .venv

# 3. 激活
source .venv/bin/activate

# 4. 安装需要的包
pip install django requests

# 5. 导出依赖(提交到 Git)
pip freeze > requirements.txt

# 6. 写代码...

# 7. 退出
deactivate

换一台电脑复现:

bash 复制代码
git clone <repo>
cd my_project
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python manage.py runserver
相关推荐
易师傅1 小时前
技术面试已死?AI 时代,真正拉开程序员差距的是什么?
前端·后端·程序员
苍何1 小时前
办公 Agent 权威评测榜单出炉了,豆包第一
后端
AiMan1 小时前
别再把秘塔会话逐个点开:这可把秘塔多个会话一次导出?AI导出鸭
前端·后端·面试
nice_lcj5202 小时前
【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端
java·后端·spring·spring ai·ai应用开发
卷无止境2 小时前
mathmodel-figure-templates 以及两个上手案例
后端·python
Moment2 小时前
写给迷茫的应届生,怎样在 AI 时代争取更多机会
前端·后端·面试
回家路上绕了弯2 小时前
为什么还是不能直接把需求丢给 AI?
后端
锋行天下3 小时前
服务器 Python 2.7 装不了 langgraph-cli?用本地生成 Dockerfile 曲线救国
人工智能·后端·python
桦说编程3 小时前
TransmittableThreadLocal 解读:从 CRR 机制到上下文所有权
java·后端·源码