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、科学包 | 数据科学、跨语言 |
| pipenv | Pipfile管理 | 确定依赖版本 |
| poetry | pyproject.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
📝 发现内容有误?点击此处直接编辑