全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-19 8 分钟 ✍️ juanwangdev

Python虚拟环境管理

虚拟环境隔离项目依赖,避免包版本冲突,是Python开发的基础。

venv标准库

创建虚拟环境

Bash
# 创建虚拟环境
python -m venv myenv

# 指定Python版本
python3.11 -m venv myenv

# 创建时包含pip
python -m venv --copies myenv

# 激活虚拟环境
# Windows
myenv\Scripts\activate
# Linux/macOS
source myenv/bin/activate

# 退出虚拟环境
deactivate

venv管理脚本

Python
import subprocess
import os
import sys

class VenvManager:
    "虚拟环境管理"

    def create(self, name, python_version=None):
        "创建虚拟环境"
        cmd = [python_version or sys.executable, '-m', 'venv', name]
        subprocess.run(cmd, check=True)

    def activate(self, name):
        "激活(返回激活命令)"
        if os.name == 'nt':
            return f'{name}\\Scripts\\activate'
        return f'source {name}/bin/activate'

    def install(self, name, package):
        "安装包"
        pip_path = self._get_pip_path(name)
        subprocess.run([pip_path, 'install', package], check=True)

    def install_requirements(self, name, file='requirements.txt'):
        "安装依赖文件"
        pip_path = self._get_pip_path(name)
        subprocess.run([pip_path, 'install', '-r', file], check=True)

    def _get_pip_path(self, name):
        if os.name == 'nt':
            return os.path.join(name, 'Scripts', 'pip')
        return os.path.join(name, 'bin', 'pip')

venv最佳实践

Bash
# 项目结构
project/
├── .venv/             # 虚拟环境(通常放在项目根目录)
├── src/
├── tests/
├── requirements.txt   # 依赖列表
└── README.md

# 创建虚拟环境
python -m venv .venv

# 激活
source .venv/bin/activate

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

# 保存依赖
pip freeze > requirements.txt

virtualenv增强版

virtualenv特点

Bash
# 安装
pip install virtualenv

# 创建虚拟环境
virtualenv myenv

# 指定Python版本
virtualenv -p python3.11 myenv

# 不继承系统包
virtualenv --no-site-packages myenv

# 与venv区别:
# 1. 支持更多Python版本
# 2. 可指定任意Python解释器
# 3. 更快的创建速度

virtualenvwrapper

Bash
# 安装
pip install virtualenvwrapper

# 配置(~/.bashrc)
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

# 常用命令
mkvirtualenv myenv       # 创建并激活
workon myenv             # 切换环境
deactivate               # 退出
rmvirtualenv myenv       # 删除
lsvirtualenv             # 列出所有环境

# 项目关联
mkproject myproject      # 创建环境+项目目录

conda科学计算环境

conda基础

Bash
# 安装Miniconda或Anaconda

# 创建环境
conda create -n myenv python=3.11

# 指定包版本
conda create -n myenv python=3.11 numpy=1.26 pandas

# 激活环境
conda activate myenv

# 退出环境
conda deactivate

# 列出环境
conda env list

# 删除环境
conda env remove -n myenv

conda环境管理

Bash
# 导出环境
conda env export > environment.yml

# 从配置创建
conda env create -f environment.yml

# 克隆环境
conda create --clone myenv -n myenv_copy

# 安装包
conda install numpy pandas matplotlib
conda install -c conda-forge package_name  # 指定频道

# pip兼容
conda activate myenv
pip install package_not_in_conda

environment.yml

YAML
name: myenv
channels:
  - conda-forge
  - defaults
dependencies:
  - python=3.11
  - numpy=1.26
  - pandas=2.0
  - matplotlib
  - pip
  - pip:
    - some_pip_package

pip依赖管理

requirements.txt

txt
# 基本格式
numpy==1.26.4
pandas>=2.0,<3.0
requests>=2.28
flask  # 不指定版本

# 开发依赖分开
# requirements.txt
flask==3.0.0
requests>=2.28

# requirements-dev.txt
pytest>=7.0
pytest-cov>=4.0
black>=23.0
flake8>=6.0

# 安装
pip install -r requirements.txt
pip install -r requirements-dev.txt

pip高级用法

Bash
# 安装特定版本
pip install package==1.0.0
pip install package>=1.0,<2.0

# 从Git安装
pip install git+https://github.com/user/package.git@main

# 从本地安装
pip install -e ./local_package  # 可编辑模式

# 只安装依赖
pip install --no-deps package

# 升级包
pip install --upgrade package

# 查看包信息
pip show package
pip list

# 检查依赖冲突
pip check

pyproject.toml现代配置

项目配置

toml
# pyproject.toml

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "myproject"
version = "1.0.0"
description = "My Python Project"
authors = [{name = "Author", email = "author@example.com"}]
requires-python = ">=3.10"

dependencies = [
    "flask>=3.0",
    "requests>=2.28",
]

[project.optional-dependencies]
dev = [
    "pytest>=7.0",
    "black>=23.0",
]

[project.scripts]
myapp = "myproject.cli:main"

使用pyproject.toml

Bash
# 安装项目
pip install .

# 安装开发依赖
pip install .[dev]

# 创建虚拟环境并安装
python -m venv .venv
source .venv/bin/activate
pip install -e .[dev]

环境选择对比

工具特点适用场景
venv标准库、轻量简单项目、纯Python
virtualenv增强版、多版本支持需指定特定Python版本
virtualenvwrapper集中管理环境多项目开发
conda包含Python、科学包数据科学、跨语言
pipenvPipfile管理确定依赖版本
poetrypyproject.toml现代项目管理

最佳实践

项目环境配置

Bash
# 1. 项目根目录创建.venv
python -m venv .venv

# 2. .gitignore排除虚拟环境
echo ".venv/" >> .gitignore

# 3. 激活环境
source .venv/bin/activate

# 4. 安装依赖
pip install -r requirements.txt

# 5. 开发完成后冻结依赖
pip freeze > requirements.txt

VS Code配置

JSON
// .vscode/settings.json
{
    "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
    "python.terminal.activateEnvironment": true
}

环境变量管理

Python
# 使用.env文件
# .env
DATABASE_URL=postgres://localhost:5432/db
API_KEY=secret_key

# Python读取
from dotenv import load_dotenv
import os

load_dotenv()
db_url = os.getenv('DATABASE_URL')

# .gitignore
.env
.env.local

注意:生产环境使用环境变量或Secret管理服务,不要将敏感信息放入.env文件。

要点总结

  • venv:Python标准库、轻量简单、适合纯Python项目
  • virtualenv:增强功能、可指定Python版本、virtualenvwrapper集中管理
  • conda:科学计算友好、包含Python解释器、跨语言支持
  • requirements.txt:pip依赖列表、pip freeze生成、版本锁定
  • pyproject.toml:现代项目配置、声明式依赖、替代setup.py
  • 最佳实践:项目内创建.venv、.gitignore排除、环境变量分离

存放路径articles/PYTHON/专家/生态与工具链/虚拟环境管理.md

📝 发现内容有误?点击此处直接编辑

← 上一篇 Python机器学习生态
下一篇 → Python API设计最佳实践
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库