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退出,再删文件夹。
为什么要用虚拟环境?
不用虚拟环境,同一个Python下的项目共用一个site-packages。项目A用旧版pandas、项目B需要新版时,放不下两个版本,升级后A可能悄悄出错;虚拟环境则给每个项目一个专属的包文件夹。
venv自Python 3.3起属于标准库,无需另装。环境建立在已有的“基础”Python之上,默认看不到其中的包。官方文档提到三点:
- 可随时丢弃:能轻松删除重建,别放自己的代码。
- 不进版本控制:提交依赖清单,不提交环境。
- 不可移动:别复制或移动,到新位置重新创建。
如何创建venv
- 打开终端,进入项目文件夹。
- 运行创建命令:Windows用
py -m venv .venv,macOS/Linux用python3 -m venv .venv。文件夹名venv、.venv皆可,.gitignore里要写同一个。 - 等几秒,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或zsh | source .venv/bin/activate |
| macOS/Linux,fish | source .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)也行;激活只对当前终端窗口有效,新窗口需重新激活。
安装包并保存到requirements.txt
激活后照常安装;用python -m pip而非pip,可保证pip与python使用同一个解释器:
python -m pip install requests
python -m pip freeze > requirements.txtpip 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的团队成员。
常见报错排查
| 现象 | 可能的原因 | 解决办法 |
|---|---|---|
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:执行策略。
相关阅读
为帮助理解本文而制作的原创插画。