在开始一个 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 版本、操作系统和网络环境不同而有所差异。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐