当前位置: 首页 > news >正文

Python学习之包管理:pip + virtualenv(及 conda)

Python学习之包管理:pip + virtualenv(及 conda)

Python 3 包管理:pip + virtualenv(及 conda)

Python 项目的依赖管理是开发中最基本也最重要的技能之一。这篇文档覆盖 pip 包管理、虚拟环境(virtualenv / venv)、conda 环境,以及实际项目中的最佳实践。


一、pip —— Python 的包安装器

pip 是 Python 的官方包管理工具,从 Python 3.4 开始默认随 Python 一起安装。

1.1 安装包

# 安装最新版本
pip install requests# 安装指定版本
pip install requests==2.31.0# 安装某个版本范围
pip install "requests>=2.28,<3.0"# 从 Git 仓库安装
pip install git+https://github.com/psf/requests.git# 从本地路径安装(开发模式)
pip install .
pip install -e .          # 可编辑模式,代码改动立即生效# 同时安装多个包
pip install requests flask numpy

1.2 卸载包

pip uninstall requests
pip uninstall requests flask numpy   # 卸载多个
pip uninstall -y requests            # 跳过确认提示

1.3 查看与搜索

# 查看已安装的所有包
pip list# 查看某个包的详细信息
pip show requests
# Name: requests
# Version: 2.31.0
# Summary: ...
# Location: /path/to/site-packages
# Requires: charset-normalizer, idna, urllib3, certifi# 查看哪些包可以更新
pip list --outdated# 查看某个包的安装路径下的文件列表
pip show -f requests

1.4 导出与复现依赖

# 导出当前环境的所有依赖到文件
pip freeze > requirements.txt# 从文件安装依赖(在新环境中复现)
pip install -r requirements.txt

requirements.txt 长这样:

requests==2.31.0
flask==3.0.0
numpy==1.26.2
pandas==2.1.4

1.5 升级包

pip install --upgrade requests        # 升级到最新版
pip install -U requests               # 等价写法

1.6 处理安装源(镜像加速)

默认 pip 从 PyPI(pypi.org)下载,国内速度可能很慢。可以指定镜像源:

# 临时使用镜像
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple# 永久配置镜像(写入用户级配置文件)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple# 常用国内镜像
# 清华:https://pypi.tuna.tsinghua.edu.cn/simple
# 阿里云:https://mirrors.aliyun.com/pypi/simple
# 豆瓣:https://pypi.doubanio.com/simple

也可以直接创建配置文件 ~/.pip/pip.conf(Linux/macOS)或 %APPDATA%\pip\pip.ini(Windows):

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn

二、虚拟环境 —— 为什么需要它

核心问题: 如果你所有项目都直接用系统 Python,项目 A 需要 Flask 2.x,项目 B 需要 Flask 3.x,就会冲突。

虚拟环境的作用: 为每个项目创建一个独立的 Python 环境,拥有自己的包目录,互不干扰。

系统 Python 3.12
├── 项目 A 的虚拟环境 → Flask 2.3, requests 2.28
├── 项目 B 的虚拟环境 → Flask 3.0, requests 2.31
└── 项目 C 的虚拟环境 → Django 5.0, psycopg2

三、venv —— Python 内置的虚拟环境工具

从 Python 3.3 开始,标准库自带 venv 模块,无需额外安装。

3.1 创建虚拟环境

# 在项目目录下创建
python -m venv .venv# 也可以指定名称
python -m venv myenv# 指定 Python 版本(如果系统有多个版本)
python3.11 -m venv .venv
python3.12 -m venv .venv

这会在当前目录下创建一个 .venv 文件夹,里面是一个完整的独立 Python 环境。

3.2 激活虚拟环境

# Linux / macOS
source .venv/bin/activate# Windows CMD
.venv\Scripts\activate.bat# Windows PowerShell
.venv\Scripts\Activate.ps1# Windows Git Bash
source .venv/Scripts/activate

激活后,终端提示符前面会出现环境名称:

(.venv) user@host:~/myproject$

此时 pythonpip 都指向虚拟环境内的版本,安装的包也只在虚拟环境中。

3.3 退出虚拟环境

deactivate

3.4 删除虚拟环境

直接删除文件夹即可:

rm -rf .venv          # Linux/macOS
rmdir /s .venv        # Windows CMD

3.5 完整工作流示例

# 1. 创建项目目录
mkdir myproject && cd myproject# 2. 创建虚拟环境
python -m venv .venv# 3. 激活虚拟环境
source .venv/bin/activate    # Linux/macOS# 4. 安装依赖
pip install requests flask# 5. 开发...
# 编写代码,import requests, import flask 等# 6. 导出依赖
pip freeze > requirements.txt# 7. 退出虚拟环境
deactivate

在另一台机器上复现环境:

git clone <repo> && cd myproject
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

四、virtualenv —— 更强大的第三方替代

virtualenvvenv 的第三方版本,功能更多(速度更快、支持更多 Python 版本、可自动发现 virtualenvwrapper 等),但需要额外安装:

pip install virtualenv# 使用方式与 venv 几乎一样
virtualenv .venv
source .venv/bin/activate

venv vs virtualenv 怎么选: 对于大多数情况,内置的 venv 完全够用。只有在需要特殊功能(比如指定下载某些版本的 Python)时才需要 virtualenv


五、virtualenvwrapper —— 虚拟环境管理利器

如果你经常在多个项目间切换,virtualenvwrapper 提供了一组快捷命令,所有虚拟环境统一管理在一个目录下:

# 安装
pip install virtualenvwrapper# Linux/macOS 配置(加到 ~/.bashrc 或 ~/.zshrc)
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh# Windows 用户可以用 virtualenvwrapper-win
pip install virtualenvwrapper-win

常用命令:

# 创建虚拟环境(自动激活)
mkvirtualenv myproject# 列出所有虚拟环境
lsvirtualenv# 切换到某个虚拟环境
workon myproject# 删除虚拟环境
rmvirtualenv myproject# 复制虚拟环境
cpvirtualenv old_env new_env

六、conda —— 科学计算领域的全能选手

conda 是 Anaconda / Miniconda 提供的包和环境管理器,不仅能管理 Python 包,还能管理 C/C++ 库、R 语言包等非 Python 依赖。在数据科学和机器学习领域非常流行。

6.1 安装 conda

推荐安装 Miniconda(精简版,只包含 conda 和 Python),而非完整的 Anaconda:

# 下载地址
# https://docs.conda.io/en/latest/miniconda.html# Linux 安装
bash Miniconda3-latest-Linux-x86_64.sh# macOS / Windows 直接下载安装包

6.2 conda 环境管理

# 创建环境
conda create --name myproject python=3.12# 指定多个包
conda create --name myproject python=3.12 numpy pandas matplotlib# 克隆已有环境
conda create --name myproject_copy --clone myproject# 激活环境
conda activate myproject# 退出环境
conda deactivate# 列出所有环境
conda env list# 删除环境
conda remove --name myproject --all

6.3 conda 包管理

# 安装包
conda install numpy
conda install numpy=1.26# 从 conda-forge 频道安装(包更全更新)
conda install -c conda-forge lightgbm# 卸载包
conda remove numpy# 查看已安装的包
conda list# 更新包
conda update numpy# 更新 conda 本身
conda update conda

6.4 导出与复现 conda 环境

# 导出环境配置
conda env export > environment.yml# 从配置文件创建环境
conda env create -f environment.yml# 更新已有环境
conda env update -f environment.yml

environment.yml 长这样:

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

6.5 配置 conda 镜像

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
conda config --set show_channel_urls yes

七、pip + venv vs conda —— 怎么选

对比项 pip + venv conda
安装 Python 包 很好 很好
安装非 Python 依赖(如 CUDA、GDAL) 需要系统手动装 一条命令搞定
管理 Python 版本本身 不能 可以,轻松切换 Python 版本
包数量 PyPI 上超过 50 万个包 conda 仓库包少一些,但可通过 pip 补充
适合场景 Web 开发、脚本、通用项目 数据科学、机器学习、科学计算
是否需要额外安装 不需要(Python 自带) 需要安装 Miniconda / Anaconda
混合使用 可以在 conda 环境中用 pip 不建议在 venv 中用 conda

简单建议: 如果做 Web 开发或一般 Python 项目,用 pip + venv 就够了。如果做数据分析、机器学习、深度学习,优先考虑 conda——很多科学计算库的安装会省心很多。


八、项目依赖管理的进阶工具

当项目复杂度上升后,requirements.txt 会显得力不从心。以下工具值得了解:

pip-tools —— 锁定精确依赖

pip install pip-tools# 编写手动依赖(只有你直接需要的包)
# requirements.in:
# requests
# flask# 编译生成带完整依赖树和精确版本的 requirements.txt
pip-compile requirements.in# 同步安装(会卸载不在文件中的包)
pip-sync requirements.txt

Poetry —— 现代化的项目管理

pip install poetry# 初始化新项目
poetry new myproject
# 或在已有项目中初始化
poetry init# 添加依赖
poetry add requests
poetry add pytest --group dev     # 开发依赖# 安装所有依赖
poetry install# 运行命令
poetry run python main.py

pyproject.toml 配置示例:

[tool.poetry]
name = "myproject"
version = "0.1.0"
description = "My awesome project"[tool.poetry.dependencies]
python = "^3.11"
requests = "^2.31"
flask = "^3.0"[tool.poetry.group.dev.dependencies]
pytest = "^7.4"
black = "^23.0"

九、最佳实践

1. 每个项目一个虚拟环境,绝不污染系统 Python。

2. 把虚拟环境目录加入 .gitignore。

# .gitignore
.venv/
venv/
env/

3. 用 requirements.txt 或 pyproject.toml 锁定依赖版本。 不要只写 requests,要写 requests==2.31.0,确保任何人、任何时间装出来的环境都一样。

4. 区分生产依赖和开发依赖。

# requirements.txt(生产环境)
requests==2.31.0
flask==3.0.0# requirements-dev.txt(开发环境)
-r requirements.txt          # 先引入生产依赖
pytest==7.4.3
black==23.12.0
ruff==0.1.8
# 生产环境
pip install -r requirements.txt# 开发环境
pip install -r requirements-dev.txt

5. 定期更新依赖,但不要盲目升级。

# 查看过时的包
pip list --outdated# 逐个升级并测试
pip install --upgrade requests
# 跑一遍测试确认没问题
pytest

6. 大项目考虑用 Poetry 或 pip-tools。 它们能自动处理依赖冲突,生成可复现的锁文件。


十、速查表

操作 pip + venv conda
创建环境 python -m venv .venv conda create -n name python=3.12
激活环境 source .venv/bin/activate conda activate name
退出环境 deactivate conda deactivate
安装包 pip install pkg conda install pkg
卸载包 pip uninstall pkg conda remove pkg
查看已安装 pip list conda list
导出依赖 pip freeze > requirements.txt conda env export > environment.yml
从文件安装 pip install -r requirements.txt conda env create -f environment.yml

学习建议:先把 pip + venv 的完整工作流(创建环境 → 激活 → 安装包 → 导出依赖 → 在另一台机器复现)亲手跑通,这是最基本的能力。conda 和 Poetry 等工具在遇到具体需求时再深入即可。第一步,打开终端创建一个虚拟环境,装几个包试试,反复练习激活和退出,形成肌肉记忆。