管理

Python虚拟环境venv怎么用:创建、激活、安装包与删除

本文在AI辅助下由原文翻译而成。请结合原文核对专业术语和公式。

创建Python虚拟环境:在项目文件夹打开终端,运行python -m venv .venv(macOS/Linux改用python3),再激活:PowerShell用.venv\Scripts\Activate.ps1,cmd用.venv\Scripts\activate.bat,macOS/Linux用source .venv/bin/activate。之后pip install只会装进该项目的.venv;要删除,先deactivate退出,再删文件夹。

两个项目各有一个.venv文件夹,里面装着不同版本的pandas和NumPy,都建立在同一个基础Python之上;右侧是不用虚拟环境时共用的site-packages文件夹,两个pandas版本在里面互相冲突
图1. 每个项目都有自己的.venv和各自的包版本,基础Python不受影响(包版本为示例数字)。

为什么要用虚拟环境?

不用虚拟环境,同一个Python下的项目共用一个site-packages。项目A用旧版pandas、项目B需要新版时,放不下两个版本,升级后A可能悄悄出错;虚拟环境则给每个项目一个专属的包文件夹。

venv自Python 3.3起属于标准库,无需另装。环境建立在已有的“基础”Python之上,默认看不到其中的包。官方文档提到三点:

  • 可随时丢弃:能轻松删除重建,别放自己的代码。
  • 不进版本控制:提交依赖清单,不提交环境。
  • 不可移动:别复制或移动,到新位置重新创建。

如何创建venv

  1. 打开终端,进入项目文件夹。
  2. 运行创建命令:Windows用py -m venv .venv,macOS/Linux用python3 -m venv .venv。文件夹名venv、.venv皆可,.gitignore里要写同一个。
  3. 等几秒,Python建好文件夹并装入pip(加--without-pip则不装)。

.venv内有pyvenv.cfg(home键指向创建它的Python)、Scripts(macOS/Linux为bin,放python、pip和激活脚本)、Lib\site-packages(其他系统为lib/pythonX.Y/site-packages)。Python 3.13起还默认写入.gitignore,让Git自动忽略该文件夹。

如何激活venv

激活会把Scripts(或bin)放到PATH最前,python、pip便指向.venv里的那份。按shell选命令:

系统与shell激活命令
Windows PowerShell.venv\Scripts\Activate.ps1
Windows命令提示符(cmd).venv\Scripts\activate.bat
macOS/Linux,bash或zshsource .venv/bin/activate
macOS/Linux,fishsource .venv/bin/activate.fish
macOS/Linux上的PowerShell(pwsh).venv/bin/Activate.ps1

成功后提示符前会多出(.venv)。确认:PowerShell用Get-Command python,cmd用where python,macOS/Linux用which python,首个路径应在.venv内(PowerShell的where是别名,不能用)。

激活并非必须,直接运行.venv\Scripts\python app.py(macOS/Linux为.venv/bin/python app.py)也行;激活只对当前终端窗口有效,新窗口需重新激活。

命令速查卡:对比Windows与macOS/Linux上创建、激活、安装包、保存清单、重建、退出和删除Python虚拟环境的命令
图2. Windows与macOS/Linux上venv的完整生命周期。不同系统之间,只有创建、激活和删除的命令不一样。

安装包并保存到requirements.txt

激活后照常安装;用python -m pip而非pip,可保证pip与python使用同一个解释器:

python -m pip install requests
python -m pip freeze > requirements.txt

pip freeze按名称==版本号逐行列出已安装的包,正是pip install能读回的格式,官方教程称存成requirements.txt是常见约定。行数比敲的多:只装requests,也会带上四个依赖(certifi、charset-normalizer、idna、urllib3),见图3。换电脑或重建环境时,新建并激活venv,再运行python -m pip install -r requirements.txt。

退出、删除虚拟环境与Git忽略

输入deactivate退出环境,关闭终端效果相同。venv没有卸载命令,退出后删文件夹即可:

  • PowerShell:Remove-Item -Recurse -Force .venv
  • 命令提示符:rmdir /s /q .venv
  • macOS/Linux:rm -rf .venv

在文件资源管理器或访达里删除也行。代码和requirements.txt不受影响,重新创建、激活、安装即可恢复。

Git方面,在项目的.gitignore里加一行.venv/。Python 3.13起环境虽自带忽略文件,写上这一行仍能保护用旧版Python的团队成员。

my-project的文件夹树:.venv内含pyvenv.cfg、Scripts、Lib\site-packages和自动生成的.gitignore,不进Git;项目的.gitignore、requirements.txt和main.py要提交;右侧示例requirements.txt列出requests及其四个依赖
图3. 提交代码和requirements.txt,不提交.venv。只安装requests,就生成了五行固定版本(版本号为示例)。

常见报错排查

现象可能的原因解决办法
PowerShell拒绝运行Activate.ps1(“在此系统上禁止运行脚本”)执行策略禁止脚本;Windows客户端各范围均未设置时,有效策略为Restricted执行一次Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser,或改用cmd和activate.bat
包已装好,VS Code仍报导入错误编辑器用了别的解释器命令面板运行Python: Select Interpreter(中文界面为“Python: 选择解释器”),选.venv里的
pip把包装进了全局Python当前终端没激活环境先激活,用Get-Command或which确认,再用python -m pip
移动或重命名文件夹后失效环境内存的是绝对路径删掉.venv,按requirements.txt重建
Debian/Ubuntu提示“ensurepip is not available”venv支持单独打包装python3-venv(或python3.X-venv),删掉建到一半的文件夹再建

不想永久修改,可把-Scope CurrentUser换成-Scope Process,仅当前窗口有效。

常见问题

venv能用别的Python版本吗?

venv永远使用创建它的那个Python。要建Python 3.12的环境,就用该版本创建:Windows用py -3.12 -m venv .venv,macOS/Linux用python3.12 -m venv .venv。

代码怎么知道自己在不在venv里?

检查sys.prefix != sys.base_prefix,在虚拟环境里为True。别依赖VIRTUAL_ENV:只有激活才会设置它,而激活并非必须。

参考来源:Python文档:venv;Python教程:虚拟环境和包;打包用户指南(英文);Microsoft Learn:执行策略。

相关阅读

为帮助理解本文而制作的原创插画。