如果你写 Python 写得久了,必定遇到过这种情况:
这就是著名的 “依赖地狱”。而虚拟环境,就是解决它的终极武器。
在开始介绍工具之前,我们先明确为什么需要虚拟环境:
适用场景:Python标准开发、简单项目、初学者入门
特点:
优点:
缺点:
基本用法:
# 创建虚拟环境
python -m venv myenv
# 激活环境 (Windows)
myenvScriptsactivate
# 激活环境 (Unix/macOS)
source myenv/bin/activate
# 停用环境
deactivate适用场景:需要兼容Python 2和3的项目、需要更多自定义选项
特点:
优点:
缺点:
安装与使用:
# 安装
pip install virtualenv
# 创建虚拟环境
virtualenv myenv
# 激活/停用方式与venv一样适用场景:应用开发、依赖管理需求强的项目
特点:
优点:
缺点:
安装与使用:
# 安装
pip install pipenv
# 创建虚拟环境并安装包
pipenv install requests
# 激活环境
pipenv shell
# 安装开发依赖
pipenv install pytest --dev
# 生成requirements.txt
pipenv lock -r > requirements.txt适用场景:包开发、需要严格依赖管理的项目
特点:
优点:
缺点:
安装与使用:
# 安装
pip install poetry
# 创建新项目
poetry new myproject
# 添加依赖
poetry add requests
# 安装所有依赖
poetry install
# 激活环境
poetry shell适用场景:数据科学、机器学习、需要非Python依赖的项目
特点:
优点:
缺点:
安装与使用:
# 创建环境
conda create -n myenv python=3.8
# 激活环境
conda activate myenv
# 安装包
conda install numpy
# 列出环境
conda env list适用场景:需要管理多个Python版本
特点:
优点:
缺点:
安装与使用(Linux/macOS):
# 安装(使用Homebrew)
brew install pyenv
# 列出可用Python版本
pyenv install --list
# 安装特定版本
pyenv install 3.9.0
# 设置全局Python版本
pyenv global 3.9.0
# 创建虚拟环境(结合virtualenv)
pyenv virtualenv 3.9.0 myenv适用场景:需要完整环境隔离、跨团队协作、生产部署
特点:
优点:
缺点:
基本用法:
# Dockerfile示例
FROM python:3.9-slim
WORKDIR /app
# 创建虚拟环境(可选但推荐)
RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
# 安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
CMD ["python", "app.py"]构建与运行:
# 构建镜像
docker build -t myapp .
# 运行容器
docker run -it --rm -p 8000:8000 myapp
问题1:虚拟环境和 Docker 如何选择?
问题2:Docker 中是否需要虚拟环境?
推荐使用,缘由:
问题3:如何管理开发和生产的不同依赖?
# 开发阶段安装所有依赖
RUN pip install -r requirements-dev.txt
# 生产阶段仅安装必要依赖
RUN pip install -r requirements.txt问题4:Docker 构建慢怎么办?
Python 虚拟环境工具和 Docker 各有侧重,理解它们的优缺点和适用场景至关重大。对于 Python 开发者:
提议的学习路径: