怎么用命令行列出所有Python虚拟环境

陈默
陈默
发布时间:2026-11-01 | 6人浏览过
原创

详细讲解在不同操作系统和工具链下,如何通过命令行列出系统中所有的Python虚拟环境,涵盖Conda、venv、pyenv、Poetry、Pipenv以及全局检索方案。

在 Python 开发中,并没有一个通用的全局中央注册表管理所有环境;要列出系统中的虚拟环境,核心在于明确所使用的环境管理工具:Conda 用户执行 conda env list,pyenv 用户执行 pyenv virtualenvs,使用项目内原生 venv 的用户则可以通过查找 pyvenv.cfg 配置文件或检查固定目录来扫描出所有环境路径。

一、为什么“列出所有虚拟环境”需要区分工具

很多初学者在终端里输入诸如 python --list-envs 这样的命令时,会发现命令行提示找不到参数。这是因为 Python 官方标准库自带的 venv 设计初衷是轻量级、免侵入的目录隔离:它仅仅是在指定目录下放置一套独立的解释器软链接、脚本及 site-packages 目录,并不会向系统全局写入索引或登记记录。

与此相对,像 Anaconda、Miniconda、pyenv、Poetry 或 Pipenv 等第三方工具,通常维护了一套集中管理机制或固定的目录存放规范。因此,在命令行中列出环境的第一步,是根据你的工作流选择对应的指令。

怎么用命令行列出所有Python虚拟环境
图 1:Python 虚拟环境按存储与索引机制的分类示意

二、集中管理的虚拟环境:直接使用专用命令

如果日常使用 Conda、pyenv 或 virtualenvwrapper 管理 Python 环境,这些工具自身维护了环境路径清单,可以通过一行命令完整列出。

1. Conda 与 Mamba

Conda 是数据科学与通用开发中最典型的集中式环境管理器。在终端中执行以下任一命令:

conda env list

或者执行功能相同的扩展命令:

conda info --envs

命令输出的典型示例如下:

# conda environments:
#
base                  *  /opt/miniconda3
data-analysis            /opt/miniconda3/envs/data-analysis
web-crawler              /opt/miniconda3/envs/web-crawler

在返回结果中,第一列为环境名称,第二列为环境在硬盘上的完整物理路径。如果名称右侧带有星号 *,表示该环境为当前终端正在激活使用的环境。

2. pyenv 与 pyenv-virtualenv

如果使用 pyenv 以及 pyenv-virtualenv 插件来管理多版本 Python 与虚拟环境,可以运行:

pyenv virtualenvs

该命令仅过滤并列出所有虚拟环境及其对应的基准 Python 版本;如果希望同时看到安装的 Python 原生版本与虚拟环境,可直接执行:

pyenv versions

输出示例:

  system
  3.10.12
* 3.10.12/envs/my-api-env (set by /Users/username/Projects/api/.python-version)
  3.11.4
  my-api-env

带有 * 标记的同样代表当前激活的环境,后方还会标明该激活状态是通过哪个 .python-version 文件触发的。

3. virtualenvwrapper

如果使用的是基于标准 virtualenv 的扩展工具 virtualenvwrapper,所有虚拟环境统一存放在 ~/.virtualenvs 目录下。此时可以在终端运行:

workon

或者使用格式更为详细的命令:

lsvirtualenv -b

执行后命令行会逐行打印出保存在环境仓库中的所有环境名称。

怎么用命令行列出所有Python虚拟环境
图 2:主流集中式虚拟环境管理工具的命令行调用对比

三、现代打包工具(Poetry 与 Pipenv)的环境列出方式

现代 Python 工程广泛使用 Poetry 或 Pipenv。它们的默认行为是将虚拟环境存放在集中缓存目录,也可以配置为放置在项目根目录下。

1. Poetry

如果当前正在某个具体的工程目录下,可以直接运行:

poetry env list

终端会输出该项目关联的所有虚拟环境及其激活状态,例如:

my-project-py3.10 (Activated)
my-project-py3.11

如果要查看整个系统中通过 Poetry 创建过的所有虚拟环境,可以通过列出 Poetry 默认缓存目录下的文件来实现:

# Linux / macOS 默认缓存路径
ls -l $(poetry config cache-dir)/virtualenvs

# Windows PowerShell 查看路径
Get-ChildItem ((poetry config cache-dir) + "\virtualenvs")

2. Pipenv

在具体项目目录下,运行 pipenv --venv 可以直接输出该工程关联的环境绝对路径:

pipenv --venv

由于 Pipenv 默认会将所有虚拟环境以“项目目录名-哈希串”的形式统一保存在用户家目录,因此可以通过列出该目录查看全局所有 Pipenv 环境:

# Linux / macOS
ls -1 ~/.local/share/virtualenvs

# Windows PowerShell
Get-ChildItem "$HOME\.virtualenvs"

四、标准库 venv 散落环境的全局检索方法

对于直接使用 python -m venv .venv 创建的环境,由于它们通常分散在各个独立的代码仓库或工作文件夹中,必须借助操作系统的命令行搜索工具进行扫描。

每一个标准 Python 虚拟环境在创建时,其根目录下都会生成一个关键标记文件:pyvenv.cfg。无论该环境被命名为 .venv、env 还是其他名字,只要检索到 pyvenv.cfg,就能百分之百确定该目录为一个 Python 虚拟环境。

怎么用命令行列出所有Python虚拟环境
图 3:通过搜索 pyvenv.cfg 文件扫描系统所有分散虚拟环境的过程

1. Linux 与 macOS 终端命令

在 Unix-like 系统中,通过 find 命令并在家目录或主要项目代码目录下扫描:

# 搜索用户家目录下深度不超过5层的虚拟环境
find ~ -maxdepth 5 -name "pyvenv.cfg" -exec dirname {} \; 2>/dev/null

参数解释:

  • -maxdepth 5:限制扫描目录深度,避免扫描遍历过深浪费过多时间;
  • -name "pyvenv.cfg":精准匹配虚拟环境的标志性配置文件;
  • -exec dirname {} \;:提取该配置文件所在的父级目录,直接返回环境根目录;
  • 2>/dev/null:屏蔽无权限访问目录时的 Permission denied 报错提示。

2. Windows PowerShell 命令

在 Windows 环境下,打开 PowerShell 执行以下命令:

# 在代码存放盘符或用户目录下查找
Get-ChildItem -Path "$HOME" -Filter "pyvenv.cfg" -Recurse -Depth 5 -ErrorAction SilentlyContinue | Select-Object -ExpandProperty DirectoryName

执行后终端会逐行输出包含 pyvenv.cfg 的目录完整路径,如 C:\Users\username\Projects\demo\.venv。

五、如何快速识别当前终端生效的虚拟环境

在排查所有环境的同时,经常需要确认“当前控制台正在运行哪一个环境”。命令行中提供了一致且可靠的环境变量与路径核查方式:

1. 查看 VIRTUAL_ENV 环境变量

当通过 source <path>/bin/activate(或 Windows 上的 activate.bat)激活环境后,终端会自动注入 VIRTUAL_ENV 环境变量:

# Linux / macOS
echo $VIRTUAL_ENV

# Windows PowerShell
$env:VIRTUAL_ENV

# Windows CMD
echo %VIRTUAL_ENV%

如果该变量有返回值,其内容就是当前处于激活状态的虚拟环境目录绝对路径;如果返回为空,说明当前终端未激活任何原生或 virtualenv 环境。

2. 查看当前 Python 解释器的具体路径

有时候用户可能通过修改 PATH、VS Code 自动切换或 Conda 环境激活了 Python,此时可以直接查看当前执行的 python 命令到底指向哪个二进制文件:

# Linux / macOS
which python

# Windows
where.exe python

或者直接在命令行调用 Python 一行代码输出前缀路径:

python -c "import sys; print(sys.prefix)"

如果 sys.prefix 输出的路径与全局系统 Python 路径不同(例如包含了某个 .venv 或 envs/ 字符串),即可明确判定当前处于该虚拟环境中。

六、命令行列出与识别命令全景总结

为了便于在不同场景下快速查找与备忘,下表汇总了各种主流虚拟环境管理方式的列出命令与对应特征:

工具类别 命令行列出指令 适用环境与存放模式 环境激活标记
Conda / Mamba conda env list 集中存放(默认位于 anaconda/envs) 输出列表中带 * 号
pyenv pyenv virtualenvs 集中存放(位于 ~/.pyenv/versions) 输出列表中带 * 号
virtualenvwrapper workon 或 lsvirtualenv 集中存放(位于 ~/.virtualenvs) 当前环境高亮或命令行前缀括号
Poetry poetry env list 集中缓存或项目内(按配置决定) 输出后标有 (Activated)
Pipenv pipenv --venv 集中存放(默认 ~/.local/share/virtualenvs) 输出当前项目绑定的环境路径
原生 venv / 任意工具 find ~ -name "pyvenv.cfg" 全盘或代码根目录分散存储 环境变量 $VIRTUAL_ENV
怎么用命令行列出所有Python虚拟环境
图 4:Python 虚拟环境管理与检测三步法速查总结
日常建议:如果你在本地经常需要管理大量不同项目的虚拟环境,建议团队或个人统一环境创建规范。例如在项目根目录统一使用 .venv 作为目录名并加入 .gitignore,或者统一采用 Conda / pyenv 等集中管理工具,以便于在命令行中快速盘点和清理过期依赖。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表