Python虚拟环境 venv&uv
Python虚拟环境 venv&uv
1. 创建一个venv的虚拟环境
1.1 pip show pip
pip show 是 pip 内置子命令,作用:查看一个已安装包的详细元信息。
(base) ➜ ~ pip show pip
Name: pip
Version: 23.3.1
Summary: The PyPA recommended tool for installing Python packages.
Home-page: https://pip.pypa.io/
Author: The pip developers
Author-email: distutils-sig@python.org
License: MIT
Location: /opt/anaconda3/lib/python3.11/site-packages
Requires:
Required-by:
- 当前环境:Anaconda 自带的 base 虚拟环境
- pip 版本:23.3.1(版本偏旧,2023 年底版本,存在部分兼容性、安全漏洞)
- 绑定 Python:Python 3.11
- 安装路径:
/opt/anaconda3/lib/python3.11/site-packages,说明是conda全局安装的pip,不是单独系统 Python 的
1.2 生成venv 虚拟环境
python -m venv .venv
python -m
- -m 参数含义:以模块方式运行 Python 内置标准库
- 强制调用当前这条 python 命令绑定的解释器,避免 pip/python 版本错乱,是最规范写法
venv
- Python 3.3+ 自带的内置虚拟环境模块,不需要额外 pip 安装,专门用来创建隔离的 Python 虚拟环境。
- 作用:给项目单独一套 Python 解释器、pip、依赖包,不同项目依赖版本互不冲突。
.venv
虚拟环境文件夹名称,. 开头在 Linux/macOS 会被默认隐藏
行业通用惯例:几乎所有 Python 项目都把虚拟环境命名为 .venv,放在项目根目录下
执行后发生了什么
运行完当前目录会生成 .venv 隐藏文件夹,内部包含:
- 独立 Python 解释器
- 独立 pip 工具
- site-packages 包安装目录
相当于给这个项目单独复制了一套干净 Python 环境。
激活虚拟环境(分系统)
- macOS / Linux
source .venv/bin/activate
激活成功后,命令行前缀会出现 (.venv) 标识。

- Windows CMD
.venv\Scripts\activate.bat
- Windows PowerShell
.venv\Scripts\Activate.ps1
激活后常用操作
# 安装依赖,只会装在.venv里
pip install requests numpy
>>> import requests
>>> import numpy
>>> print(numpy.__version__)
2.4.6
>>> print(requests.__version__)
2.34.2
# 导出依赖清单给别人复用
pip freeze > requirements.txt
# 退出虚拟环境
deactivate



配套.gitignore 规范(必加)
把虚拟环境上传到 Git 毫无意义,在 .gitignore 添加一行:
.venv/
__pycache__/
*.pyc
小总结

1.3 升级 pip(推荐两种方式)
pip install --upgrade pipconda update pip
升级完成后再次校验:
pip -V
# 或
pip show pip
安装包的建议
后续装包优先:
python -m pip install xxx,防止装到别的 Python 里
若后续打算用 uv 替代 pip 做极速依赖管理,可以安装:
pip install uv
(.venv) (base) ➜ site-packages pip install uv
Collecting uv
Downloading uv-0.12.1-py3-none-macosx_11_0_arm64.whl.metadata (11 kB)
Downloading uv-0.12.1-py3-none-macosx_11_0_arm64.whl (18.4 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.4/18.4 MB 1.6 MB/s 0:00:14
Installing collected packages: uv
Successfully installed uv-0.12.1
(.venv) (base) ➜ site-packages uv --version
uv 0.11.6 (65950801c 2026-04-09 aarch64-apple-darwin)
2. uv
uv是新一代python环境管理工具,比如可以安装多个不同版本的python环境,uv可以管理包(依赖)的版本。

2.1 uv 多版本 Python 核心能力
2.1.1 安装多个独立 Python 版本(互不覆盖、全局统一存放)
# 安装uv,这个是先安装好了python然后安装的uv
(.venv) (base) ➜ site-packages pip install uv
Collecting uv
Downloading uv-0.12.1-py3-none-macosx_11_0_arm64.whl.metadata (11 kB)
Downloading uv-0.12.1-py3-none-macosx_11_0_arm64.whl (18.4 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.4/18.4 MB 1.6 MB/s 0:00:14
Installing collected packages: uv
Successfully installed uv-0.12.1
(.venv) (base) ➜ site-packages uv --version
uv 0.11.6 (65950801c 2026-04-09 aarch64-apple-darwin)
# 查看可下载的所有Python版本
uv python list
# 一键安装多个版本(自动下载官方预编译包,macOS/ARM自动适配)
uv python install 3.10
uv python install 3.11
uv python install 3.12
uv python install 3.13
# 只看本机已经装好的版本
uv python list --installed
所有版本存在独立目录:~/.local/share/uv/python/,完全隔离,不会污染系统 Python。
(base) ➜ Documents pip show uv
Name: uv
Version: 0.11.6
Summary: An extremely fast Python package and project manager, written in Rust.
Home-page: https://pypi.org/project/uv/
Author:
Author-email: "Astral Software Inc." <hey@astral.sh>
License:
Location: /opt/anaconda3/lib/python3.11/site-packages
Requires:
Required-by:
2.1.2 给不同项目绑定不同 Python 版本
方式 1:创建虚拟环境时直接指定版本
# 项目A:基于Python3.10创建.venv
uv venv --python=3.10 .venv
# 项目B:基于Python3.12创建.venv
uv venv --python=3.12 .venv
每个项目的.venv里面自带对应版本的 Python 解释器,彻底隔离。
方式 2:项目永久锁定版本(团队协作规范)
进入项目目录执行:
uv python pin 3.12
不用激活环境,直接指定版本运行代码
# 用3.11版本跑脚本
uv run --python 3.11 python main.py
2.1.3 环境变量的配置

Windows (CMD)
setx UV_DEFAULT_INDEX "https://pypi.tuna.tsinghua.edu.cn/simple"
Windows (PowerShell)
# 临时生效
$env:UV_INDEX_URL = "https://pypi.tuna.tsinghua.edu.cn/simple/"
# 永久生效(用户变量)
[Environment]::SetEnvironmentVariable("UV_INDEX_URL", "https://pypi.tuna.tsinghua.edu.cn/simple/", "User")
Mac/Linux 永久配置一行
echo 'export UV_INDEX_URL="https://pypi.tuna.tsinghua.edu.cn/simple/"' >> ~/.zshrc
source ~/.zshrc
2.1.4 新项目使用uv
uv init --no-package
uv venv
安装依赖包
uv add requests
uv tree









2.1.5 uv与venv同时存在时 项目依赖安装
## 环境安装
### 方式1:uv 推荐(团队/CI/生产)
uv venv .venv
source .venv/bin/activate
uv pip sync uv.lock
### 方式2:原生 venv + pip 兼容
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
2.1.6 UV 新建项目强制指定 Python 版本



完整大厂新项目一套标准流程
# 1. 提前装好解释器(一次执行)
uv python install 3.11
# 2. 新建文件夹进入
mkdir api-demo && cd api-demo
# 3. 项目永久锁定Python3.11(提交git)
uv python pin 3.11
# 4. 基于锁定版本创建虚拟环境
uv venv .venv
# 5. 激活环境
source .venv/bin/activate
# 6. 安装依赖 + 生成锁文件
uv pip install fastapi uvicorn
# 4. 生成生产锁文件 + 兼容老同事requirements.txt
uv lock
uv pip freeze > requirements.txt
补充避坑要点
- 如果本机没执行 uv python install 3.11,执行 uv venv --python=3.11 会自动触发下载;
.python-version文件优先级最高,优先级:.python-version> 命令行 --python 参数 >pyproject.toml;- 给老已有项目改 Python 版本:修改
.python-version,删掉旧.venv重新uv venv .venv重建即可; - 和同事混用原生 venv:对方执行
python -m venv .venv前,本地装好对应版本 Python 就行,完全兼容。
2.1.7 uv命令补充

2.1.8 拉别人的代码 通过uv安装环境
- 第一步:拉取代码到本地
git clone 你的GitLab仓库地址
cd 项目文件夹名称
- 第二步:判断项目里有什么依赖文件(3 种场景全覆盖)


3. 为什么有了uv还需要venv
uv 是「工具管理器 + 依赖解析器 + 包安装器」,venv 是「Python 隔离环境底层载体」;uv 可以直接调用 / 创建 venv,但不能替代 venv 本身的隔离原理。


❌ 错误:uv 替代了 venv
✅ 正确:uv 包装、增强了 venv,底层载体仍是标准虚拟环境
❌ 错误:有 uv 就不需要虚拟环境隔离
✅ 正确:uv 只是安装工具,不隔离 Python 包路径,不做隔离依然会版本打架
最终极简总结(记忆版)
venv:负责环境物理隔离(地基,Python 官方标准,无法被替代)
uv:负责环境创建加速、依赖解析、下载提速、版本锁定、多 Python 管理(上层高效工具)
更多推荐



所有评论(0)