Python 项目为什么要使用虚拟环境?Windows 下的 venv 实战指南
在开始一个 Python 项目时,很多人会直接执行:
pip install requests
项目少的时候,这样做看起来很方便。但当项目逐渐增多,不同项目依赖的库版本可能不一致,系统 Python 环境就容易变得混乱。
例如:
- 项目 A 需要某个库的旧版本;
- 项目 B 需要同一个库的新版本;
- 升级一个项目的依赖后,另一个项目突然无法运行;
- 删除某个库时,其他项目也受到影响。
解决这类问题的常见方法,就是为每个项目创建独立的虚拟环境。
一、什么是 Python 虚拟环境
Python 虚拟环境可以理解为一个相对独立的项目运行目录。它通常包含:
- 独立的 Python 解释器入口;
- 独立的第三方库安装目录;
- 独立的 pip 工具;
- 项目所需的依赖包。
它并不会创建一个完全独立的操作系统,而是让不同项目之间的 Python 依赖尽量互不干扰。
二、检查 Python 是否安装
在 Windows PowerShell 中执行:
python --version
如果系统中配置了 Python,也可以尝试:
py --version
正常情况下会显示 Python 版本号。如果提示找不到命令,需要先安装 Python,并在安装时注意配置环境变量。
三、创建虚拟环境
假设我们准备创建一个名为 demo-project 的项目。
首先创建项目目录:
mkdir demo-project
cd demo-project
然后创建虚拟环境:
python -m venv .venv
这里的 .venv 是虚拟环境目录名。它不是固定名称,也可以改成 venv 或其他名称。
使用 .venv 的好处是目录名比较明确,并且许多编辑器能够自动识别它。
四、激活虚拟环境
在 PowerShell 中执行:
.\.venv\Scripts\Activate.ps1
激活成功后,命令行前面通常会出现类似下面的标记:
(.venv) PS C:\demo-project>
这表示当前命令行已经进入虚拟环境。
如果使用 Windows 命令提示符,可以执行:
.venv\Scripts\activate.bat
如果使用 macOS 或 Linux,则通常执行:
source .venv/bin/activate
五、在虚拟环境中安装依赖
激活虚拟环境后,再安装第三方库:
python -m pip install requests
这里使用 python -m pip,比直接使用 pip 更容易确认 pip 对应的是当前 Python 解释器。
查看已安装的依赖:
python -m pip list
检查某个库的信息:
python -m pip show requests
编写一个简单的测试文件 main.py:
import requests
response = requests.get("https://example.com", timeout=10)
print(response.status_code)
运行:
python main.py
这段代码会请求 example.com,并输出 HTTP 状态码。由于网络环境、代理设置和目标网站状态可能不同,实际运行结果可能有所差异。
六、导出项目依赖
当项目需要交给其他人使用时,可以导出当前环境中的依赖列表:
python -m pip freeze > requirements.txt
生成的 requirements.txt 内容大致如下:
certifi==...
charset-normalizer==...
idna==...
requests==...
urllib3==...
具体版本号会根据实际安装时间和环境变化,因此不应直接照搬示例中的版本号。
其他人拿到项目后,可以创建虚拟环境并安装依赖:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -r requirements.txt
七、退出虚拟环境
完成工作后,可以执行:
deactivate
退出后,命令行前面的 (.venv) 标记会消失。
八、虚拟环境目录要不要提交到 Git
通常不建议把 .venv 目录提交到 Git 仓库,原因包括:
- 目录可能比较大;
- 不同操作系统的文件结构不同;
- 虚拟环境可以根据依赖文件重新创建;
- 解释器路径可能包含本机目录信息。
可以在 .gitignore 中加入:
.venv/
__pycache__/
*.pyc
项目中保留 requirements.txt,其他开发者就可以根据它重新安装依赖。
九、PowerShell 无法执行激活脚本怎么办
部分 Windows 环境会限制 PowerShell 脚本执行,执行激活命令时可能出现权限提示。
可以先查看当前策略:
Get-ExecutionPolicy
如果当前用户允许调整策略,可以使用:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
执行前应确认这是自己能够接受的安全策略,并了解 PowerShell 执行策略的含义。如果不想修改 PowerShell 设置,也可以改用命令提示符激活:
.venv\Scripts\activate.bat
十、推荐的项目目录结构
一个简单的 Python 项目可以采用下面的结构:
demo-project/
├─ .venv/
├─ main.py
├─ requirements.txt
├─ .gitignore
└─ README.md
如果项目复杂一些,还可以增加:
demo-project/
├─ src/
├─ tests/
├─ pyproject.toml
└─ README.md
总结
虚拟环境并不是 Python 项目的强制要求,但它可以有效减少依赖冲突,降低项目之间互相影响的可能性。
一个比较实用的工作流程是:
mkdir demo-project
cd demo-project
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install requests
python -m pip freeze > requirements.txt
当项目依赖较多、需要多人协作,或者需要在不同机器上部署时,使用虚拟环境会更加方便。
本文示例使用的是 Python 官方提供的 venv 和 pip 命令。更多细节可以参考 Python 官方文档:
本文未使用虚构的测试数据或性能结论。不同电脑上的命令输出可能因 Python 版本、操作系统和网络环境不同而有所差异。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)