Python虚拟环境创建

文章导读
搜「Python虚拟环境创建」的人,多数已经遇到具体问题:终端里 python 和 python3 指向不同版本,pip install 装完包后项目仍然导入失败,或者在共享机器上,自己装的包影响了别人。要判断问题出在哪,先确认三件事:当前使用的是哪个 Python 解释器、打算把环境建在哪个目录、shell 激活脚本是否生效。这三项都能用命令核对,不需要凭印象猜测。
📋 目录
  1. 一 虚拟环境创建:先把能核对的事实摆清楚
  2. 二 虚拟环境创建最容易搞错的一点
  3. 三 虚拟环境创建:一个照着就能做完的做法
  4. 四 虚拟环境创建:怎么验证结果对不对
A A

搜「Python虚拟环境创建」的人,多数已经遇到具体问题:终端里 python 和 python3 指向不同版本,pip install 装完包后项目仍然导入失败,或者在共享机器上,自己装的包影响了别人。要判断问题出在哪,先确认三件事:当前使用的是哪个 Python 解释器、打算把环境建在哪个目录、shell 激活脚本是否生效。这三项都能用命令核对,不需要凭印象猜测。

处理 Python 虚拟环境创建问题,可先固定一条核对路径:用 python3 --version 和 which python3 确认真实解释器路径,再在项目目录用 python3 -m venv .venv 创建环境,最后用 source .venv/bin/activate(Windows 用 .venv\Scripts\activate)激活并检查 which python 是否指向 .venv 内。适用场景是本地或共享机器上的普通项目开发;边界是这一步只解决隔离,不解决依赖版本冲突本身,也不等于能复现他人的运行环境。

虚拟环境创建:先把能核对的事实摆清楚

这一段先不下结论,只列出创建虚拟环境前可以直接查到的东西。

  • 解释器版本:python3 --version。输出形如 Python 3.11.6,版本号以本机实际输出为准,不要照抄教程里的数字。
  • 解释器路径:Linux/macOS 用 which python3,Windows PowerShell 用 Get-Command python。输出是绝对路径时,说明调用到的是哪个安装。
  • venv 模块是否可用:python3 -m venv --help。能打印帮助说明标准库自带;报 No module named venv 通常说明当前解释器是精简安装,需要先补装系统包,具体包名要以发行版文档为准。
  • 项目目录:pwd 或 cd 的输出。虚拟环境建议建在项目根目录下,目录名常用 .venv。
  • 已有环境痕迹:ls -a 是否已经存在 .venv,以及 .gitignore 里是否忽略了该目录。

判断创建是否成功的面板字段或文件位置也很固定:创建命令执行后,.venv/ 下应出现 bin/(Windows 是 Scripts/)、lib/ 和 pyvenv.cfg。pyvenv.cfg 里会记录 home 和 version,这两个字段就是后续排查问题时最直接的证据。

虚拟环境创建最容易搞错的一点

最常见的误解是:以为执行了 python3 -m venv .venv 之后,当前终端的 Python 就已经切换过去了。实际上创建只是把一套解释器副本和目录结构写到磁盘上,不激活就不会改变当前 shell 的 python 指向。很多人创建完直接 pip install,包装进的是系统环境,随后出现「明明装了却导入不到」的假象。

区分这两种情况的检查动作只有一个:创建后先不安装任何东西,执行 which python(Windows 用 Get-Command python),然后激活虚拟环境,再执行同一条命令。

Python虚拟环境创建
which python3
source .venv/bin/activate
which python

如果激活前后输出路径没有变化,说明激活没有生效,问题在 shell 或脚本路径,而不在 pip。激活成功的典型特征是命令行提示符前面出现 (.venv),且 which python 指向 .venv/bin/python。Windows 上如果 PowerShell 报脚本执行策略错误,需要按 Get-ExecutionPolicy 的输出确认策略,而不是反复重建环境。

虚拟环境创建:一个照着就能做完的做法

下面这条路径从项目目录开始,参数写完整,每一步都标注该看到什么。假设项目目录已存在,系统里可用的命令是 python3。

# 1. 进入项目根目录
cd /path/to/your-project

# 2. 确认解释器
python3 --version
# 期望:打印 Python 3.x.y

# 3. 创建虚拟环境,--upgrade-deps 会顺带升级环境内的 pip
python3 -m venv --upgrade-deps .venv
# 期望:无输出正常返回;结束后 ls -a 能看到 .venv

# 4. 激活(Linux / macOS)
source .venv/bin/activate
# 期望:提示符前出现 (.venv)

# 5. 升级 pip 并确认解释器已切换
python -m pip install --upgrade pip
which python
# 期望:路径落在 /path/to/your-project/.venv/bin/python

Windows PowerShell 的对应写法是:

Python虚拟环境创建
python -m venv --upgrade-deps .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
Get-Command python

如果 --upgrade-deps 在你使用的旧版本 Python 上不被识别,可以去掉该参数,创建完成后单独执行 python -m pip install --upgrade pip。是否支持该参数,以 python3 -m venv --help 的实际输出为准。

创建完成后,把虚拟环境目录写进 .gitignore,避免把整套解释器提交进仓库:

echo ".venv/" >> .gitignore

虚拟环境创建:怎么验证结果对不对

验证分三层,每层都有明确的正常结果。

  1. 解释器层:在激活状态下执行 python -c "import sys; print(sys.prefix)"。正常结果是输出项目下 .venv 的绝对路径;如果输出系统路径如 /usr,说明当前仍在系统环境。

    Python虚拟环境创建
  2. 安装层:执行 python -m pip -V,输出里的 pip 路径应位于 .venv 目录内。随后安装一个依赖并查看落地位置:python -m pip install requests,再用 python -c "import requests; print(requests.__file__)" 确认模块文件路径也在 .venv 下。

  3. 隔离层:python -m pip list 应只列出环境内自己装的包,而不是系统里的一大堆。若列表里出现系统级的包,多半是创建时带了 --system-site-packages,需要重建。

最后再核对一次配置文件:cat .venv/pyvenv.cfg,其中的 home 应指向创建时使用的解释器所在目录,version 应与第 2 步打印的版本一致。这三层加上配置文件都对上,再开始装项目依赖;任何一层对不上,先回到激活这一步排查,不要急着删环境重建。