直接用python -m venv .venv创建,不加--system-site-packages、不用全局pip install;.venv命名利于IDE识别和git忽略,路径须无中文空格,激活后需验证python路径指向虚拟环境内。

直接用 venv 就够了,不需要额外装 virtualenv 或 conda——Python 3.3+ 自带的 venv 模块已完全满足绝大多数项目开发需求,轻量、标准、无额外依赖。
怎么创建一个真正干净的项目级环境
关键不是“能不能创建”,而是“创建时有没有埋下隐患”。很多团队踩坑源于路径、命名和初始化方式不对。
- 始终在项目根目录执行:
python -m venv .venv(推荐用.venv而非venv,隐藏文件夹更不易误提交) - 避免路径含中文、空格或符号——Windows 下尤其容易触发编码错误或激活失败
- 不要加
--system-site-packages:它会把全局包“漏”进来,破坏隔离性;真有系统级依赖(如某些 C 扩展),应明确用pip install重装 - 创建后立即检查:
which python(macOS/Linux)或where python(Windows),确认路径指向.venv/...而非系统 Python
为什么不能用 pip freeze > requirements.txt 直接生成依赖文件
这条命令导出的是当前环境里所有包(包括 pip、setuptools、wheel 等构建工具),还会混入间接依赖(transitive deps),导致 requirements.txt 过度锁定、难以维护。
创建 Flask + Vue.js 全栈项目,采用单端口架构、uv 依赖管理、结构化日志和生产级前端设计。当用户要求以下操作时触发:创建新的 Flask+Vue 项目、搭建 Web 应用、构建全栈 Python+Vue 应用、初始化 Flask Web 项目、设置单端口 Flask 前后端项目。触发词:新建项目、创建项目、搭建项目、Flask项目、Vue项目。
- 只记录你**显式声明**要使用的包:比如项目里写了
import requests和from flask import Flask,那就只写requests和flask - 用
pip install -e .配合pyproject.toml更可控(现代推荐),或手动维护精简版requirements.in,再用pip-compile生成带版本约束的requirements.txt - 若坚持用
freeze,至少先清理无关包:pip uninstall pip setuptools wheel -y,再pip freeze > requirements.txt
激活与日常使用中容易被忽略的细节
很多人以为“激活了就万事大吉”,但实际运行时仍可能掉进路径、shell 权限、IDE 集成等坑里。
立即学习“Python免费学习笔记(深入)”;
- PowerShell 默认禁止执行本地脚本:首次在 Windows 上运行
.venv\Scripts\Activate.ps1会报错execution policy,需临时允许:Set-ExecutionPolicy RemoteSigned -Scope CurrentUser - VS Code / PyCharm 不会自动识别新创建的
.venv:必须手动在设置里选中.venv/bin/python(macOS/Linux)或.venv\Scripts\python.exe(Windows)作为解释器 - 终端切换窗口或新开 tab 后,虚拟环境自动失效——这不是 bug,是设计使然;每次新开 shell 都需重新激活,或把
source .venv/bin/activate加到 shell 配置里(不推荐,易污染非项目场景) -
pip和python必须成对使用:在激活环境中,不要混用python -m pip install和裸pip install,虽然通常等效,但在某些 CI 或容器环境下行为不一致
最常被绕过的点是:虚拟环境本身不解决 Python 解释器版本差异。如果项目需要 python3.9 而系统默认是 3.11,venv 只能基于当前 python 命令创建环境。这时候得靠 pyenv 先管理解释器版本,再用 venv 做依赖隔离——两者是互补关系,不是替代关系。


















