pin_drop当前位置:知识文库 ❯ 图文

Python虚拟环境 - venv/virtualenv/conda环境管理

概述

虚拟环境是Python开发中非常重要的概念和工具。它可以为每个项目创建独立的Python运行环境,使不同项目之间的依赖互不干扰。本教程将介绍为什么需要虚拟环境,以及使用venv、virtualenv、conda等工具创建和管理虚拟环境的方法,帮助你建立规范的项目开发习惯。


为什么需要虚拟环境

问题场景

假设你有两个Python项目:

  • 项目A 依赖 requests==2.28.0

  • 项目B 依赖 requests==2.31.0

如果不使用虚拟环境,两个项目共享同一个Python环境,你只能安装一个版本的requests,另一个项目就会出问题。

虚拟环境的优势

优势 说明
依赖隔离 每个项目拥有独立的包环境,互不干扰
版本管理 不同项目可以使用不同版本的同一包
可复现性 通过requirements.txt可以精确复现环境
系统整洁 不会污染全局Python环境
权限安全 不需要管理员权限即可安装包

虚拟环境的工作原理

虚拟环境本质上是一个独立的目录,包含:

  • Python解释器的副本或链接

  • 独立的 site-packages 目录

  • 独立的 pip 工具

  • 激活脚本(用于修改PATH等环境变量)


venv创建虚拟环境

venv是Python 3.3+内置的虚拟环境模块,无需额外安装。

创建虚拟环境

代码示例

python -m venv myenv

这会在当前目录下创建一个名为 myenv 的虚拟环境目录。

指定Python版本

代码示例

python3.11 -m venv myenv
python3.12 -m venv myenv

创建时不清空已有目录

代码示例

python -m venv myenv --clear

不包含pip

代码示例

python -m venv myenv --without-pip

指定prompt名称

代码示例

python -m venv myenv --prompt=myproject

激活后终端提示符会显示 (myproject) 而不是 (myenv)

虚拟环境目录结构

代码示例

myenv/
├── Include/          # Windows: C头文件
├── Lib/              # 第三方包安装目录
│   └── site-packages/
├── Scripts/          # Windows: 激活脚本和可执行文件
│   ├── activate.bat
│   ├── activate.ps1
│   ├── pip.exe
│   └── python.exe
├── bin/              # macOS/Linux: 激活脚本和可执行文件
│   ├── activate
│   ├── pip
│   └── python
└── pyvenv.cfg        # 虚拟环境配置文件

virtualenv创建虚拟环境

virtualenv是第三方虚拟环境工具,功能比venv更丰富,支持Python 2和更早的Python 3版本。

安装virtualenv

代码示例

pip install virtualenv

创建虚拟环境

代码示例

virtualenv myenv

指定Python版本

代码示例

virtualenv -p python3.12 myenv
virtualenv --python=/usr/bin/python3.12 myenv

继承全局site-packages

代码示例

virtualenv --system-site-packages myenv

不包含pip

代码示例

virtualenv --no-pip myenv

指定prompt名称

代码示例

virtualenv --prompt="myproject" myenv

venv与virtualenv对比

特性 venv virtualenv
安装方式 Python内置 需要pip安装
Python 2支持
创建速度 较快 较快
指定Python版本 通过不同版本python命令 通过-p参数
内置支持
功能丰富度 基础 更丰富
维护状态 Python官方维护 社区维护
推荐场景 Python 3.3+项目 需要更多功能或Python 2

激活与退出虚拟环境

激活虚拟环境

操作系统 激活命令
Windows CMD myenv\Scripts\activate.bat
Windows PowerShell myenv\Scripts\Activate.ps1
macOS/Linux source myenv/bin/activate
Fish Shell source myenv/bin/activate.fish
Csh Shell source myenv/bin/activate.csh

提示:激活成功后,终端提示符前会出现虚拟环境名称,如 (myenv) $

PowerShell执行策略问题

在Windows PowerShell中首次激活可能会遇到执行策略限制:

代码示例

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

退出虚拟环境

代码示例

deactivate

在任意操作系统上,激活虚拟环境后直接输入 deactivate 即可退出。

在IDE中激活

  • VSCode:选择解释器后,终端会自动激活对应虚拟环境

  • PyCharm:项目配置虚拟环境后,终端自动激活


虚拟环境管理

使用pip配合虚拟环境

代码示例

python -m venv myenv
source myenv/bin/activate
pip install requests flask
pip freeze > requirements.txt
deactivate

在新机器上复现环境:

代码示例

python -m venv myenv
source myenv/bin/activate
pip install -r requirements.txt

删除虚拟环境

直接删除虚拟环境目录即可:

代码示例

rm -rf myenv

Windows:

代码示例

Remove-Item -Recurse -Force myenv

提示:删除前请确保已退出虚拟环境(执行 deactivate)。

virtualenvwrapper

virtualenvwrapper是一组Shell函数,简化虚拟环境的管理。

安装:

代码示例

pip install virtualenvwrapper

配置(添加到 ~/.bashrc~/.zshrc):

代码示例

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Projects
source /usr/local/bin/virtualenvwrapper.sh

常用命令:

命令 说明
mkvirtualenv myenv 创建并激活虚拟环境
workon myenv 切换到指定虚拟环境
deactivate 退出当前虚拟环境
rmvirtualenv myenv 删除虚拟环境
lsvirtualenv 列出所有虚拟环境
cdvirtualenv 进入虚拟环境目录

Windows用户可以使用 virtualenvwrapper-win

代码示例

pip install virtualenvwrapper-win

conda环境管理

conda是一个开源的包管理和环境管理系统,广泛用于数据科学和科学计算领域。

安装conda

推荐安装Miniconda(轻量版):

创建conda环境

代码示例

conda create --name myenv python=3.12

指定Python版本和包

代码示例

conda create --name myenv python=3.12 numpy pandas

从环境文件创建

代码示例

conda env create -f environment.yml

激活conda环境

代码示例

conda activate myenv

退出conda环境

代码示例

conda deactivate

列出所有conda环境

代码示例

conda env list

删除conda环境

代码示例

conda env remove --name myenv

导出环境

代码示例

conda env export > environment.yml

environment.yml格式

代码示例

name: myenv
channels:
  - defaults
  - conda-forge
dependencies:
  - python=3.12
  - numpy=1.26.2
  - pandas=2.1.4
  - pip:
    - requests==2.31.0
    - flask==3.0.0

conda常用命令

命令 说明
conda create -n name python=x.x 创建环境
conda activate name 激活环境
conda deactivate 退出环境
conda env list 列出所有环境
conda env remove -n name 删除环境
conda install package 安装包
conda remove package 卸载包
conda list 列出已安装包
conda env export > env.yml 导出环境
conda env create -f env.yml 从文件创建环境
conda search package 搜索包

各工具对比表格

特性 venv virtualenv conda
安装方式 Python内置 pip安装 独立安装
Python版本支持 3.3+ 2.x & 3.x 2.x & 3.x
非Python包管理
指定Python版本 有限支持
环境隔离级别 Python包 Python包 系统级
数据科学支持 一般 一般 优秀
学习曲线 中等
适用场景 通用Python开发 通用Python开发 数据科学/科学计算
包数量 PyPI PyPI Anaconda仓库+PyPI
磁盘占用 较大

选择建议:一般Python开发使用venv即可;数据科学项目推荐使用conda;需要更多虚拟环境管理功能可以使用virtualenv+virtualenvwrapper。


代码示例

自动创建项目虚拟环境的脚本

代码示例

import os
import sys
import subprocess
from pathlib import Path


def create_project(project_name: str, python_version: str = "3.12"):
    project_dir = Path(project_name)
    venv_dir = project_dir / ".venv"
    
    project_dir.mkdir(exist_ok=True)
    
    print(f"Creating project: {project_name}")
    print(f"Python version: {python_version}")
    
    subprocess.run(
        [sys.executable, "-m", "venv", str(venv_dir)],
        check=True
    )
    print(f"Virtual environment created at: {venv_dir}")
    
    src_dir = project_dir / "src"
    src_dir.mkdir(exist_ok=True)
    
    (src_dir / "__init__.py").touch()
    (src_dir / "main.py").write_text(
        'def main():\n'
        '    print("Hello from project!")\n\n\n'
        'if __name__ == "__main__":\n'
        '    main()\n'
    )
    
    (project_dir / "requirements.txt").touch()
    
    gitignore_content = (
        ".venv/\n"
        "__pycache__/\n"
        "*.pyc\n"
        ".env\n"
        "*.egg-info/\n"
        "dist/\n"
        "build/\n"
    )
    (project_dir / ".gitignore").write_text(gitignore_content)
    
    print(f"\nProject structure:")
    for path in sorted(project_dir.rglob("*")):
        depth = len(path.relative_to(project_dir).parts)
        indent = "  " * depth
        print(f"{indent}{path.name}")
    
    print(f"\nTo activate the virtual environment:")
    if sys.platform == "win32":
        print(f"  {venv_dir}\\Scripts\\activate")
    else:
        print(f"  source {venv_dir}/bin/activate")


if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: python create_project.py <project_name>")
        sys.exit(1)
    
    create_project(sys.argv[1])

检查当前虚拟环境状态的脚本

代码示例

import os
import sys


def check_environment():
    print("=" * 50)
    print("Python Environment Check")
    print("=" * 50)
    
    print(f"\nPython executable: {sys.executable}")
    print(f"Python version: {sys.version}")
    
    in_venv = hasattr(sys, "real_prefix") or (
        hasattr(sys, "base_prefix") and sys.base_prefix != sys.prefix
    )
    
    if in_venv:
        print(f"\nVirtual environment: ACTIVE")
        print(f"Environment path: {sys.prefix}")
        print(f"Base Python: {sys.base_prefix}")
    else:
        print(f"\nVirtual environment: NOT ACTIVE")
        print(f"Using system Python: {sys.prefix}")
    
    print(f"\nsys.path:")
    for p in sys.path:
        print(f"  - {p}")
    
    venv_var = os.environ.get("VIRTUAL_ENV")
    if venv_var:
        print(f"\nVIRTUAL_ENV: {venv_var}")
    
    conda_var = os.environ.get("CONDA_DEFAULT_ENV")
    if conda_var:
        print(f"Conda environment: {conda_var}")


if __name__ == "__main__":
    check_environment()

注意事项

  • 虚拟环境目录不要提交到版本控制:将 .venv/myenv/ 添加到 .gitignore

  • 项目内创建虚拟环境:建议在项目根目录下创建虚拟环境,方便管理

  • 命名规范:常用虚拟环境目录名为 .venvvenvenv,以点开头的目录在Linux/macOS下会隐藏

  • 激活后安装包:确保虚拟环境已激活再安装包,否则会安装到全局环境

  • requirements.txt:每次安装新包后,记得更新 requirements.txt

  • conda与pip混用:在conda环境中使用pip安装包时需谨慎,可能导致依赖冲突

  • 大项目建议:对于复杂项目,考虑使用Poetry或Pipenv等更高级的依赖管理工具


小结

本教程详细介绍了Python虚拟环境的搭建与管理:

  1. 虚拟环境的作用和重要性——隔离项目依赖,避免版本冲突
  2. 使用venv创建虚拟环境(Python内置,推荐首选)
  3. 使用virtualenv创建虚拟环境(功能更丰富)
  4. 激活与退出虚拟环境的方法
  5. 使用virtualenvwrapper简化虚拟环境管理
  6. 使用conda管理环境和数据科学项目
  7. 各工具的对比和选择建议

虚拟环境是Python开发的基本功,养成使用虚拟环境的习惯,将使你的开发工作更加规范和高效。


练习题

练习1

使用venv完成以下操作:

  • 创建一个名为 myproject 的项目目录

  • 在项目目录下创建虚拟环境 .venv

  • 激活虚拟环境

  • 安装 requestsbeautifulsoup4 两个包

  • 导出依赖到 requirements.txt

  • 退出虚拟环境

  • 删除虚拟环境

  • 重新创建虚拟环境并从 requirements.txt 安装依赖

练习2

编写一个Python脚本 env_manager.py,实现以下功能:

  • 创建虚拟环境(接受环境名称和Python版本作为参数)

  • 检查当前是否在虚拟环境中

  • 列出虚拟环境中已安装的包

  • 导出虚拟环境的依赖到文件

提示:使用 subprocess 模块调用相关命令,使用 argparse 模块解析命令行参数,使用 sys 模块检测虚拟环境状态。

常见问题

什么是Python虚拟环境?为什么要使用它?

Python虚拟环境是为每个项目创建独立的Python运行环境。使用虚拟环境可以隔离不同项目的依赖,避免版本冲突,使不同项目之间互不干扰。例如项目A使用requests 2.28.0,项目B使用requests 2.31.0,通过虚拟环境可以分别安装不同版本,互不影响。

venv和virtualenv有什么区别?

venv是Python 3.3+内置的虚拟环境模块,无需额外安装;而virtualenv是第三方工具,需要通过pip安装。venv功能相对基础,而virtualenv功能更丰富,支持Python 2和更多配置选项。对于Python 3.3+项目,推荐使用venv;需要更多功能或Python 2支持时使用virtualenv。

如何激活和退出虚拟环境?

激活命令因操作系统而异:Windows CMD使用 `myenv\Scripts\activate.bat`,PowerShell使用 `myenv\Scripts\Activate.ps1`,macOS/Linux使用 `source myenv/bin/activate`。退出虚拟环境在所有操作系统上都是输入 `deactivate`。

conda和venv哪个更适合数据科学项目?

对于数据科学项目,推荐使用conda。conda不仅管理Python包,还能管理非Python依赖(如C库),并且有丰富的数据科学包在Anaconda仓库中。conda提供系统级的环境隔离,更适合科学计算和数据处理场景。一般Python开发使用venv即可。

虚拟环境目录需要提交到Git吗?

不需要,也不应该。虚拟环境目录(如.venv/、venv/、env/)不应提交到版本控制,应该将它们添加到.gitignore文件中。项目应该通过requirements.txt或environment.yml文件来记录依赖,其他开发者可以根据这些文件重新创建虚拟环境。

标签: 虚拟环境 venv virtualenv conda 环境管理 pip Python教程 依赖隔离

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: pip包管理器 下一篇: 无

poll相关推荐

作者头像 智能小晨 python

pip包管理器

发布日期 2026-05-22
全面介绍pip包管理器的使用方法,包括安装卸载升级包、查看已安装包、导出项目依赖、配置国内镜像源加速下载,附常用命令速查表和自动化脚本示例。
作者头像 智能小晨 python

PyCharm安装与配置教程 - Python IDE

发布日期 2026-05-22
详细介绍PyCharm安装与Python开发环境配置,包含社区版与专业版对比、Python解释器配置、虚拟环境创建、常用编辑器设置与快捷键,助你快速上手这款专业Python IDE。
作者头像 智能小晨 python

VSCode配置Python开发环境

发布日期 2026-05-22
详细讲解VSCode配置Python开发环境的完整流程,包含VSCode安装、Python扩展推荐、解释器配置、编辑器设置、launch.json调试配置,助你打造高效Python开发工具。
作者头像 智能小晨 python

Python 安装 - Linux

发布日期 2026-05-21
详细讲解Linux系统上安装Python的两种方法:包管理器安装和源码编译安装。涵盖Ubuntu/CentOS/Fedora/Arch等主流发行版,包含update-alternatives多版本管理技巧,助你快速搭建Python开发环境。