[虚拟环境]venv工具(介绍+使用1)

240 阅读4分钟

venv 是 Python 虚拟环境 的核心工具,是python3.3+之后的一个内置库, 用于创建独立的 Python 运行环境。

下面我将为你详细解释它的概念、作用和用法。

一、什么是 venv?

venv(Virtual Environment)是 Python 3.3+ 内置的模块,用于创建轻量级的虚拟环境

每个虚拟环境都拥有:

  • 独立的 Python 解释器副本
  • 独立的包安装目录
  • 独立的环境配置

二、为什么需要虚拟环境?

主要解决的问题:

  1. 依赖冲突:不同项目需要同一库包的不同版本
  2. 项目隔离:保持项目环境的纯净和可复现
  3. 权限管理:避免需要系统权限安装包
  4. 部署一致性:确保开发、测试、生产环境一致

实际场景示例:

项目A:需要 Django 2.2 + requests 2.20
项目B:需要 Django 3.1 + requests 2.25

没有虚拟环境 → 只能安装一个版本,另一个项目无法运行
使用虚拟环境 → 每个项目有自己的独立环境

三、venv 的工作原理

my_project/
├── venv/           ← 虚拟环境目录,在项目内创建虚拟环境. 
│   ├── bin/        ← 脚本目录(Windows是Scripts)
│   ├── lib/        ← 包安装目录
│   └── pyvenv.cfg  ← 环境配置文件
├── src/            ← 项目源代码
└── requirements.txt ← 依赖列表

四、基本使用教程

1. 创建虚拟环境

# 创建名为 my_env_test1 的虚拟环境, 名称随便写
python -m venv my_env_test1

2. 激活虚拟环境

Windows (CMD/PowerShell):

# CMD
venv\Scripts\activate.bat

# PowerShell
venv\Scripts\Activate.ps1
# 如果遇到执行策略问题,先运行:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

macOS/Linux:

source my_env_test1/bin/activate

激活后,命令行提示符通常会显示环境名:

(my_env_test1) user@host:~$

3. 使用虚拟环境

# 检查Python路径(确认在虚拟环境中)
which python  # macOS/Linux
where python  # Windows

# 安装包(只影响当前虚拟环境)
pip install django
pip install requests==2.25.1

# 查看已安装包
pip list

# 导出所有的依赖到requirements.txt文件中
pip freeze > requirements.txt

# 从文件安装依赖
pip install -r requirements.txt

4. 停用虚拟环境(前提是: 你当前正在这个环境中)

deactivate

五、常用命令和操作

创建指定Python版本的环境

# 使用特定Python解释器, 你用哪一个版本的解释创建的虚拟环境, 那么虚拟环境中的解释器就是哪一个版本的.
python3.8 -m venv venv

复制环境

# 导出依赖(假设现在你在虚拟环境my_env_test1中, 你把所有的依赖打包放在文件中 )
pip freeze > requirements.txt

# 在新位置创建并安装
python -m venv my_env_test2         # 重新创建了一个新的虚拟环境my_env_test2
source my_env_test2/bin/activate    # 激活这个新的虚拟环境
pip install -r requirements.txt     # 把所有的依赖, 在新的虚拟环境中再重新安装一遍

删除虚拟环境

# 直接删除虚拟环境的文件夹即可
rm -rf my_env_test1  # macOS/Linux
rmdir /s venv        # Windows

六、最佳实践

  1. 每个项目单独环境

    project1/
      ├── .gitignore
      ├── myenv_test1/        # 虚拟环境目录,添加到.gitignore
             ├── bin/                 # Mac/Linux: 可执行文件
             │   ├── python           # Python 解释器
             │   ├── pip              # pip 包管理器
             │   └── activate         # 激活脚本
             ├── Scripts/             # Windows: 可执行文件
             │   ├── python.exe
             │   ├── pip.exe
             │   └── activate.bat
             ├── lib/                 # 安装的包
             │   └── python3.x/
             │       └── site-packages/
             ├── include/             # C/C++ 头文件
             └── pyvenv.cfg          # 配置文件
    
      ├── src/         # 项目源代码
      └── requirements.txt
    
    project2/
      ├── .gitignore
      ├── myenv_test2/      # 虚拟环境目录, 添加到.gitignore中
             ├── bin/                 # Mac/Linux: 可执行文件
             │   ├── python           # Python 解释器
             │   ├── pip              # pip 包管理器
             │   └── activate         # 激活脚本
             ├── Scripts/             # Windows: 可执行文件
             │   ├── python.exe
             │   ├── pip.exe
             │   └── activate.bat
             ├── lib/                 # 安装的包
             │   └── python3.x/
             │       └── site-packages/
             ├── include/             # C/C++ 头文件
             └── pyvenv.cfg          # 配置文件
    
      ├── src/           # 项目源代码
      └── requirements.txt
    
  2. 维护 requirements.txt

    # requirements.txt 示例
    Django==3.2.18
    requests>=2.25.0,<3.0.0
    pandas
    
  3. .gitignore 配置

    # 忽略虚拟环境
    venv/
    env/
    *.pyc
    __pycache__/
    

七、venv 与其他工具对比

工具特点适用场景
venvPython内置,简单易用标准项目,初学者友好
virtualenv功能更丰富,支持旧版Python需要更多自定义选项
conda包含非Python包,环境管理更强数据科学,跨语言项目
pipenv依赖锁定,自动管理复杂依赖管理
poetry现代包管理,依赖解析优秀包开发和发布

八、常见问题解答

Q1:venv 会占用很多磁盘空间吗?

A:不会,venv 只复制必要的文件,通常占用 15-50MB。

Q2:可以把 venv 文件夹移动到其他位置吗?

A:不建议直接移动,最好在新位置重新创建。

Q3:团队协作时如何处理虚拟环境?

A:只共享 requirements.txt,每个人自己创建虚拟环境。

Q4:如何确保环境一致性?

# 使用精确版本
pip freeze > requirements.txt

# 安装时指定
pip install -r requirements.txt

九、进阶技巧

1. 自定义虚拟环境位置

# 创建在项目外部
python -m venv ~/.virtualenvs/myproject

# 使用绝对路径激活
source ~/.virtualenvs/myproject/bin/activate

2. 使用预装包创建环境

python -m venv venv --system-site-packages

3. 快速切换环境的别名(bash/zsh用户)

# 添加到 ~/.bashrc 或 ~/.zshrc
alias activate_myproject="source ~/projects/myproject/venv/bin/activate"

总结

venv 是 Python 开发中必不可少的工具,它能:

  • ✅ 隔离项目依赖
  • ✅ 避免版本冲突
  • ✅ 简化部署流程
  • ✅ 提高开发效率

建议:无论项目大小,从一开始就使用虚拟环境,这是 Python 开发的最佳实践。

每个项目, 都有自己的虚拟环境, 这是标准的做法.