一、什么是 pip?
1.1 一句话定义
pip(Pip Installs Packages)是 Python 的官方包管理工具,用来安装、升级、卸载第三方库。
1.2 生活比喻
- pip= 手机上的"应用商店"
- PyPI(Python Package Index)= 应用商店里的"所有应用"
- pip install flask= 在应用商店搜索"Flask"并点击"安装"
- pip uninstall flask= 长按应用图标点"卸载"
- pip list= 查看"已安装的应用列表"
- requirements.txt= 你的"应用收藏清单"
1.3 pip 和 PyPI 的关系
┌─────────────────────────────────────────────────────────────┐ │ │ │ 你的电脑 互联网 │ │ ┌──────────┐ ┌──────────────────┐ │ │ │ pip │ ──请求──→ │ PyPI 服务器 │ │ │ │ (客户端) │ ←──下载── │ pypi.org │ │ │ └──────────┘ │ │ │ │ │ │ 50万+ 个包 │ │ │ ↓ │ flask, django, │ │ │ ┌──────────┐ │ numpy, pandas... │ │ │ │ 安装到 │ └──────────────────┘ │ │ │ site-packages │ │ │ └──────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘1.4 检查 pip 是否已安装
# 检查 pip 版本 pip --version # 输出:pip 24.0 from /usr/lib/python3/dist-packages/pip (python 3.12) # 或者 pip3 --version # 或者通过 Python 模块方式 python3 -m pip --version # 如果没有安装 pip: # Ubuntu/Debian: sudo apt install python3-pip # CentOS/RHEL: sudo yum install python3-pip # macOS: python3 -m ensurepip --upgrade # 通用方法: curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python3 get-pip.py📌推荐:始终用
python3 -m pip而不是直接pip,这样可以确保用的是正确的 Python 版本。
二、安装包(pip install)
2.1 最基本的安装
# 安装一个包 pip install flask # 输出: # Collecting flask # Downloading flask-3.0.0-py3-none-any.whl (101 kB) # Collecting Werkzeug>=3.0.0 # Downloading werkzeug-3.0.1-py3-none-any.whl (226 kB) # Collecting Jinja2>=3.1.2 # Downloading jinja2-3.1.2-py3-none-any.whl (133 kB) # ... # Successfully installed flask-3.0.0 jinja2-3.1.2 werkzeug-3.0.1 ...📌 安装 flask 时,pip 会自动安装它依赖的其他包(如 Werkzeug、Jinja2 等)。
2.2 安装指定版本
# 安装精确版本 pip install flask==3.0.0 # 安装最低版本(>=) pip install "flask>=2.0" # 安装版本范围 pip install "flask>=2.0,<3.0" # 安装最新版本(默认行为) pip install flask # 安装最新预发布版本(alpha/beta/rc) pip install --pre flask # ⚠️ 注意:在 bash/zsh 中,> < 是特殊字符,需要加引号! # pip install flask>=2.0 ← 错误!bash 会重定向 # pip install "flask>=2.0" ← 正确!2.3 版本说明符完整列表
| 说明符 | 含义 | 示例 |
|---|---|---|
== | 精确版本 | flask==3.0.0 |
>= | 大于等于 | flask>=2.0 |
<= | 小于等于 | flask<=3.0 |
> | 大于 | flask>2.0 |
< | 小于 | flask<4.0 |
!= | 不等于 | flask!=2.5.0 |
~= | 兼容版本 | flask~=3.0(等同于 >=3.0, <4.0) |
=== | 任意版本匹配 | flask===3.0.0(极少用) |
# ~= 的详细说明: pip install "flask~=3.0.0" # >=3.0.0, <3.1.0(只允许补丁版本变化) pip install "flask~=3.0" # >=3.0, <4.0(允许次版本变化)2.4 一次安装多个包
# 空格分隔 pip install flask requests numpy pandas # 从 requirements.txt 安装(最常用!) pip install -r requirements.txt # 从多个文件安装 pip install -r requirements.txt -r requirements-dev.txt2.5 requirements.txt 文件格式
# requirements.txt —— 项目依赖清单 # 以 # 开头的是注释 # 精确版本(推荐用于生产环境) flask==3.0.0 requests==2.31.0 numpy==1.26.2 # 版本范围(推荐用于库开发) pandas>=2.0,<3.0 sqlalchemy~=2.0 # 最低版本 django>=4.2 # 任意最新版 pytest # 带 extras(额外功能) requests[security,socks] # 从 Git 安装 # git+https://github.com/user/repo.git@main # 从本地路径安装 # ./my_package/ # 包含另一个 requirements 文件 # -r requirements-base.txt# 生成 requirements.txt(把当前环境所有包导出) pip freeze > requirements.txt # 在新环境中恢复所有依赖 pip install -r requirements.txt2.6 安装到用户目录(不需要管理员权限)
# --user 参数:安装到用户目录(~/.local/lib/python3.x/site-packages/) pip install --user flask # 适用场景: # - 没有 sudo/root 权限 # - 不想污染系统 Python 环境 # - 多用户共享服务器 # 查看用户安装路径 python3 -m site --user-site # 输出:/home/user/.local/lib/python3.12/site-packages2.7 从不同来源安装
# ============ 从 PyPI 安装(默认) ============ pip install flask # ============ 从 Git 仓库安装 ============ pip install git+https://github.com/pallets/flask.git # 指定分支 pip install git+https://github.com/pallets/flask.git@main # 指定 tag pip install git+https://github.com/pallets/flask.git@3.0.0 # 指定 commit pip install git+https://github.com/pallets/flask.git@a1b2c3d # ============ 从本地目录安装 ============ pip install ./my_package/ # 以"可编辑模式"安装(开发时用,修改代码立即生效) pip install -e ./my_package/ # ============ 从本地 .whl 或 .tar.gz 文件安装 ============ pip install ./downloads/flask-3.0.0-py3-none-any.whl pip install ./downloads/flask-3.0.0.tar.gz # ============ 从 URL 安装 ============ pip install https://example.com/packages/flask-3.0.0-py3-none-any.whl # ============ 从私有 PyPI 服务器安装 ============ pip install flask --index-url https://pypi.mycompany.com/simple/2.8 常用安装选项
# 不安装依赖(只装包本身) pip install --no-deps flask # 不缓存(每次都重新下载) pip install --no-cache-dir flask # 升级安装(如果已存在旧版本) pip install --upgrade flask pip install -U flask # 简写 # 安静模式(减少输出) pip install -q flask # 详细模式(调试用) pip install -v flask pip install -vv flask # 更详细 # 指定安装目录 pip install --target=/path/to/dir flask # 指定 Python 版本(多版本环境) python3.10 -m pip install flask python3.12 -m pip install flask # 指定代理 pip install flask --proxy http://127.0.0.1:7890 # 指定超时时间 pip install flask --timeout 60 # 重试次数 pip install flask --retries 5三、卸载包(pip uninstall)
3.1 基本卸载
# 卸载一个包 pip uninstall flask # 会提示确认: # Found existing installation: Flask 3.0.0 # Uninstalling Flask-3.0.0: # Would remove: # /usr/lib/python3/dist-packages/flask/ # /usr/lib/python3/dist-packages/flask-3.0.0.dist-info/ # Proceed (Y/n)? y # Successfully uninstalled Flask-3.0.0 # 跳过确认(自动 yes) pip uninstall -y flask # 一次卸载多个 pip uninstall -y flask requests numpy3.2 从文件批量卸载
# 从 requirements.txt 卸载所有列出的包 pip uninstall -y -r requirements.txt3.3 注意事项
# ⚠️ pip uninstall 不会卸载依赖包! # 例如:flask 依赖 werkzeug # 卸载 flask 后,werkzeug 仍然保留 # 如果想彻底清理,需要手动卸载依赖 pip uninstall -y flask werkzeug jinja2 itsdangerous click markupsafe # 或者用 pip-autoremove(第三方工具) pip install pip-autoremove pip-autoremove flask -y # 卸载 flask 及其不再被其他包使用的依赖四、升级包(pip install --upgrade)
4.1 升级单个包
# 升级到最新版 pip install --upgrade flask pip install -U flask # 简写 # 升级 pip 自身 pip install --upgrade pip python3 -m pip install --upgrade pip # 更安全的写法 # 升级到指定版本 pip install flask==3.1.04.2 批量升级
# 升级 requirements.txt 中的所有包 pip install --upgrade -r requirements.txt # 升级所有已安装的包(谨慎使用!) pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U # 更安全的方式:逐个升级 pip list --outdated # 查看哪些包有新版本,然后决定升级哪些4.3 查看可升级的包
# 列出所有有新版本可用的包 pip list --outdated # 输出示例: # Package Version Latest Type # ---------- ------- ------ ----- # flask 3.0.0 3.1.0 wheel # requests 2.31.0 2.32.0 wheel # numpy 1.26.2 2.0.0 wheel五、查看包信息
5.1 列出已安装的包
# 列出所有已安装的包 pip list # 输出示例: # Package Version # --------------- ------- # Flask 3.0.0 # Jinja2 3.1.2 # numpy 1.26.2 # pandas 2.1.4 # pip 24.0 # requests 2.31.0 # setuptools 69.0.2 # Werkzeug 3.0.1 # 以 freeze 格式输出(可直接用于 requirements.txt) pip list --format=freeze # flask==3.0.0 # Jinja2==3.1.2 # numpy==1.26.2 # 以 JSON 格式输出 pip list --format=json # 只显示过时的包 pip list --outdated # 只显示用户安装的包(排除系统包) pip list --user # 排除某些包 pip list --exclude pip --exclude setuptools # 本地安装的包(非 PyPI) pip list --local5.2 查看某个包的详细信息
# pip show 查看包的详细信息 pip show flask # 输出: # Name: Flask # Version: 3.0.0 # Summary: A simple framework for building complex web applications. # Home-page: https://palletsprojects.com/p/flask/ # Author: Armin Ronacher # Author-email: armin.ronacher@active-4.com # License: BSD-3-Clause # Location: /home/user/.local/lib/python3.12/site-packages # Requires: Werkzeug, Jinja2, itsdangerous, click, blinker # Required-by: Flask-SQLAlchemy, Flask-Login # 字段解释: # Name: 包名 # Version: 当前版本 # Summary: 简介 # Home-page: 官网 # Location: 安装路径 # Requires: 这个包依赖哪些包 # Required-by: 哪些包依赖了这个包 # 查看多个包 pip show flask requests numpy # 显示所有文件列表 pip show -f flask # 会额外列出安装的所有文件路径5.3 查看包的依赖关系
# 查看某个包依赖了什么 pip show flask | grep Requires # Requires: Werkzeug, Jinja2, itsdangerous, click, blinker # 查看谁依赖了某个包 pip show jinja2 | grep Required-by # Required-by: Flask # 更直观的依赖树(需要安装 pipdeptree) pip install pipdeptree pipdeptree # 输出示例: # Flask==3.0.0 # - blinker [required: >=1.6.2, installed: 1.7.0] # - click [required: >=8.1.3, installed: 8.1.7] # - itsdangerous [required: >=2.1.2, installed: 2.1.2] # - Jinja2 [required: >=3.1.2, installed: 3.1.2] # - MarkupSafe [required: >=2.0, installed: 2.1.3] # - Werkzeug [required: >=3.0.0, installed: 3.0.1] # - MarkupSafe [required: >=2.1.1, installed: 2.1.3] # 只看某个包的依赖树 pipdeptree -p flask # 反向依赖(谁依赖了这个包) pipdeptree -r -p jinja2六、搜索和查找包
6.1 在命令行搜索
# ⚠️ pip search 已被禁用!(PyPI 的 XMLRPC API 已关闭) # pip search flask ← 不再可用 # 替代方案1:直接去网站搜索 # https://pypi.org/search/?q=flask # 替代方案2:用 pip index(pip 21.2+) pip index versions flask # 输出: # flask (3.1.0) # Available versions: 3.1.0, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 2.3.3, ... # 替代方案3:第三方工具 pip install pip-search pip_search flask6.2 查看某个包的所有可用版本
# 方法1:pip index versions(pip 21.2+) pip index versions requests # 方法2:故意安装一个不存在的版本,pip 会列出所有版本 pip install flask==99999 # 错误信息中会列出所有可用版本: # ERROR: Could not find a version that satisfies the requirement flask==99999 # (from versions: 0.1, 0.2, ..., 3.0.0, 3.0.1, 3.0.2, 3.0.3, 3.1.0)七、pip freeze —— 导出依赖
7.1 基本用法
# 导出当前环境所有包(requirements.txt 格式) pip freeze # 输出: # blinker==1.7.0 # click==8.1.7 # Flask==3.0.0 # itsdangerous==2.1.2 # Jinja2==3.1.2 # MarkupSafe==2.1.3 # Werkzeug==3.0.1 # 保存到文件 pip freeze > requirements.txt # 排除某些包 pip freeze --exclude pip --exclude setuptools > requirements.txt # 只导出用户安装的包 pip freeze --user > requirements.txt # 只导出本地安装的包 pip freeze --local > requirements.txt # 以 requirements.txt 格式(和 freeze 一样,但更明确) pip list --format=freeze > requirements.txt7.2 freeze vs list 的区别
# pip freeze:输出 "包名==版本" 格式(可直接用于 pip install -r) pip freeze # Flask==3.0.0 # pip list:输出表格格式(人类可读) pip list # Package Version # Flask 3.0.0 # 实际用途: # freeze → 生成 requirements.txt(给机器用) # list → 查看已装了什么(给人看)7.3 更好的依赖管理工具
# pip freeze 的问题:会列出所有包(包括间接依赖) # 更好的方案:pipreqs(只列出项目实际 import 的包) pip install pipreqs # 扫描项目目录,生成 requirements.txt pipreqs /path/to/project # 只包含项目代码中实际 import 的包 # 比 pip freeze 更精确八、pip cache —— 缓存管理
8.1 查看缓存
# 查看缓存信息 pip cache info # 输出: # Package index page cache location: /home/user/.cache/pip # Package index page cache size: 125.3 MB # Number of HTTP files: 1234 # Locally built wheels location: /home/user/.cache/pip/wheels # Locally built wheels size: 45.6 MB # Number of locally built wheels: 56 # 列出缓存中的包 pip cache list # 列出特定包的缓存 pip cache list flask8.2 清理缓存
# 删除特定包的缓存 pip cache remove flask # 删除所有缓存 pip cache purge # 安装时不使用缓存 pip install --no-cache-dir flask8.3 缓存目录位置
# Linux: ~/.cache/pip # macOS: ~/Library/Caches/pip # Windows: %LOCALAPPDATA%\pip\Cache # 查看具体路径 pip cache dir九、虚拟环境与 pip
9.1 为什么需要虚拟环境?
❌ 没有虚拟环境的问题: 项目A 需要 flask==2.0 项目B 需要 flask==3.0 → 冲突!只能装一个版本 系统 Python 被装了一堆包 → 混乱、难以管理✅ 有虚拟环境: 项目A/venv/ → flask==2.0(独立环境) 项目B/venv/ → flask==3.0(独立环境) → 互不干扰!9.2 创建和使用虚拟环境
# ============ 创建虚拟环境 ============ python3 -m venv myenv # 目录结构: # myenv/ # ├── bin/ # 可执行文件(python, pip, activate) # │ ├── python # │ ├── pip # │ └── activate # ├── lib/ # 安装的包 # │ └── python3.12/ # │ └── site-packages/ # └── pyvenv.cfg # 配置文件 # ============ 激活虚拟环境 ============ # Linux/macOS: source myenv/bin/activate # Windows CMD: myenv\Scripts\activate.bat # Windows PowerShell: myenv\Scripts\Activate.ps1 # 激活后,命令行前面会出现环境名: (myenv) user@computer:~$ # ============ 在虚拟环境中使用 pip ============ (myenv) pip install flask # 安装到虚拟环境 (myenv) pip list # 只看虚拟环境中的包 (myenv) pip freeze > requirements.txt # ============ 退出虚拟环境 ============ (myenv) deactivate user@computer:~$ # 前缀消失了9.3 完整的虚拟环境工作流
# 1. 创建项目 mkdir my_project && cd my_project # 2. 创建虚拟环境 python3 -m venv venv # 3. 激活 source venv/bin/activate # 4. 升级 pip pip install --upgrade pip # 5. 安装依赖 pip install flask requests sqlalchemy # 6. 开发... # 7. 导出依赖 pip freeze > requirements.txt # 8. 提交到 Git(注意:不要提交 venv 目录!) echo "venv/" >> .gitignore git add . git commit -m "Initial commit" # === 另一台电脑/另一个人 === # 9. 克隆项目 git clone https://github.com/user/my_project.git cd my_project # 10. 创建虚拟环境 python3 -m venv venv source venv/bin/activate # 11. 安装依赖(一键恢复) pip install -r requirements.txt # 12. 运行项目 python app.py9.4 虚拟环境中的 pip 指向
# 激活虚拟环境后: which pip # /home/user/my_project/venv/bin/pip(指向虚拟环境) which python # /home/user/my_project/venv/bin/python(指向虚拟环境) # 未激活时: which pip # /usr/bin/pip(指向系统) # 安全做法:始终用 python -m pip python -m pip install flask # 确保用当前 python 对应的 pip十、pip 配置文件
10.1 配置文件位置
# Linux: # 全局:/etc/pip.conf # 用户:~/.config/pip/pip.conf 或 ~/.pip/pip.conf # macOS: # 用户:~/Library/Application Support/pip/pip.conf # Windows: # 全局:C:\ProgramData\pip\pip.ini # 用户:%APPDATA%\pip\pip.ini # 查看当前生效的配置 pip config list pip config debug # 显示所有配置文件路径10.2 常用配置
# ~/.config/pip/pip.conf(Linux/macOS) # 或 %APPDATA%\pip\pip.ini(Windows) [global] # 使用国内镜像源(加速下载) index-url = https://pypi.tuna.tsinghua.edu.cn/simple # 备选: # index-url = https://mirrors.aliyun.com/pypi/simple/ # index-url = https://pypi.doubanio.com/simple/ # 信任的主机(避免 SSL 警告) trusted-host = pypi.tuna.tsinghua.edu.cn # 超时时间 timeout = 60 # 重试次数 retries = 5 [install] # 默认安装到用户目录 # user = true # 不使用缓存 # no-cache-dir = true [list] # 默认输出格式 format = columns10.3 使用 pip config 命令管理配置
# 设置全局镜像源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple # 设置信任主机 pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn # 查看配置 pip config list # 删除配置 pip config unset global.index-url # 编辑配置文件 pip config edit10.4 临时使用镜像源
# 命令行指定(不修改配置文件) pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple # 信任主机 pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn10.5 国内常用镜像源
| 镜像 | 地址 |
|---|---|
| 清华大学 | https://pypi.tuna.tsinghua.edu.cn/simple |
| 阿里云 | https://mirrors.aliyun.com/pypi/simple/ |
| 豆瓣 | https://pypi.doubanio.com/simple/ |
| 中科大 | https://pypi.mirrors.ustc.edu.cn/simple/ |
| 华为云 | https://repo.huaweicloud.com/repository/pypi/simple |
十一、pip download —— 只下载不安装
# 下载包(不安装),保存到指定目录 pip download flask -d ./packages/ # 下载指定版本 pip download flask==3.0.0 -d ./packages/ # 下载包及其所有依赖 pip download flask -d ./packages/ # 只下载源码包(.tar.gz) pip download --no-binary :all: flask -d ./packages/ # 只下载 wheel 包(.whl) pip download --only-binary :all: flask -d ./packages/ # 指定平台下载(交叉下载) pip download --platform manylinux2014_x86_64 --python-version 312 --only-binary :all: numpy -d ./packages/ # 实际应用:离线安装 # 在有网的机器上下载 pip download -r requirements.txt -d ./offline_packages/ # 把 offline_packages/ 拷贝到无网机器,然后: pip install --no-index --find-links=./offline_packages/ -r requirements.txt十二、pip wheel —— 构建 wheel 包
# 什么是 wheel? # .whl 文件是 Python 的"预编译"包格式,安装更快(不需要编译) # 为某个包构建 wheel pip wheel flask -w ./wheels/ # 为 requirements.txt 中的所有包构建 wheel pip wheel -r requirements.txt -w ./wheels/ # 从 wheel 文件安装 pip install ./wheels/flask-3.0.0-py3-none-any.whl # wheel 文件名解析: # flask-3.0.0-py3-none-any.whl # │ │ │ │ │ # 包名 版本 Python ABI 平台 # 版本 标签 标签 # py3 = Python 3 # none = 不依赖特定 ABI # any = 任何平台十三、pip check —— 检查依赖冲突
# 检查已安装包之间是否有依赖冲突 pip check # 没有冲突时: # No broken requirements found. # 有冲突时: # flask 3.0.0 requires Werkzeug>=3.0.0, but you have Werkzeug 2.3.0 which is incompatible. # requests 2.31.0 requires urllib3<3,>=1.21.1, but you have urllib3 2.1.0 which is incompatible. # 解决冲突: pip install "werkzeug>=3.0.0" pip install "urllib3<3,>=1.21.1"十四、pip 的高级用法
14.1 安装带 extras 的包
# 某些包有可选功能(extras) # 例如 requests 有 security 和 socks 两个 extras # 安装带安全功能的 requests pip install "requests[security]" # 安装多个 extras pip install "requests[security,socks]" # 另一个例子:pandas pip install "pandas[excel,sql]" # 安装 Excel 和 SQL 支持 # 查看某个包有哪些 extras pip show requests # 或者去 PyPI 网站查看14.2 从 Git 安装特定版本
# 从 GitHub 安装 pip install git+https://github.com/pallets/flask.git # 指定分支 pip install git+https://github.com/pallets/flask.git@main # 指定 tag(版本号) pip install git+https://github.com/pallets/flask.git@3.0.0 # 指定 commit hash pip install git+https://github.com/pallets/flask.git@abc123def # 安装子目录中的包 pip install "git+https://github.com/user/repo.git#subdirectory=package_dir" # 在 requirements.txt 中: # git+https://github.com/pallets/flask.git@3.0.0#egg=flask14.3 可编辑安装(开发模式)
# -e 或 --editable:可编辑安装 # 适用场景:你在开发一个包,想边修改边测试 # 假设你的项目结构: # my_package/ # ├── setup.py(或 pyproject.toml) # ├── my_package/ # │ ├── __init__.py # │ └── core.py # └── tests/ # 可编辑安装 cd my_package/ pip install -e . # 现在修改 my_package/core.py 后,不需要重新安装 # 其他项目 import my_package 时,直接读取你的源码 # 对比普通安装: pip install . # 复制代码到 site-packages(修改源码不生效) pip install -e . # 创建链接到源码目录(修改源码立即生效)14.4 约束文件(constraints)
# constraints 文件:限制版本范围,但不主动安装 # 和 requirements.txt 的区别: # requirements.txt = "我要装这些包" # constraints.txt = "如果装这些包,版本不能超过这个" # constraints.txt flask<3.0 numpy>=1.20,<2.0 requests==2.31.0 # 使用约束文件 pip install -c constraints.txt flask numpy requests # pip 会安装这些包,但版本受 constraints.txt 限制 # 实际场景: # 团队规定所有项目必须用 flask<3.0 # 每个项目的 requirements.txt 可以不同 # 但都受 constraints.txt 约束14.5 多 Python 版本管理
# 如果系统有多个 Python 版本 python3.10 -m pip install flask # 装到 Python 3.10 python3.11 -m pip install flask # 装到 Python 3.11 python3.12 -m pip install flask # 装到 Python 3.12 # 查看各版本的 pip python3.10 -m pip --version python3.11 -m pip --version python3.12 -m pip --version # ⚠️ 不要直接用 pip,因为不知道它对应哪个 Python # 始终用 pythonX.Y -m pip十五、常见问题排查
15.1 权限错误(Permission Denied)
# 错误: # ERROR: Could not install packages due to an OSError: [Errno 13] Permission denied # 解决方案1:使用 --user(推荐) pip install --user flask # 解决方案2:使用虚拟环境(最推荐) python3 -m venv venv source venv/bin/activate pip install flask # 解决方案3:使用 sudo(不推荐!) sudo pip install flask # ⚠️ 可能破坏系统 Python # 解决方案4:修复权限 sudo chown -R $USER ~/.local/lib/python3.12/site-packages/15.2 网络超时
# 错误: # WARNING: Retrying after connection broken by 'ReadTimeoutError' # 解决1:增加超时时间 pip install flask --timeout 120 # 解决2:使用国内镜像 pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple # 解决3:设置代理 pip install flask --proxy http://127.0.0.1:7890 # 解决4:永久配置镜像源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple15.3 依赖冲突
# 错误: # ERROR: pip's dependency resolver does not currently take into account # all the packages that are installed. # 或: # ERROR: Cannot install flask==2.0 and werkzeug==3.0 because... # 解决1:检查冲突 pip check # 解决2:让 pip 自动解决 pip install flask==2.0 werkzeug==2.0 # 手动指定兼容版本 # 解决3:使用虚拟环境(隔离项目) python3 -m venv venv source venv/bin/activate pip install -r requirements.txt # 解决4:使用更现代的工具 pip install pip-tools # 或 pip install poetry15.4 pip 版本太旧
# 警告: # WARNING: You are using pip version 21.0; however, version 24.0 is available. # 升级 pip python3 -m pip install --upgrade pip # 如果升级失败(权限问题) python3 -m pip install --upgrade pip --user # 如果还是失败 curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python3 get-pip.py --user15.5 找不到包(No matching distribution)
# 错误: # ERROR: No matching distribution found for some-package # 可能原因1:包名拼写错误 pip install flsk # ❌ 拼错了 pip install flask # ✅ # 可能原因2:Python 版本不兼容 # 某些包只支持特定 Python 版本 python3 --version # 检查你的版本 # 去 PyPI 网站查看包的兼容版本 # 可能原因3:平台不兼容 # 某些包只有 Linux/macOS/Windows 版本 # 可能原因4:镜像源没有同步 # 换回官方源试试 pip install some-package -i https://pypi.org/simple/15.6 卸载后 import 仍然成功
# 原因:可能装在了多个位置 # 检查包的安装位置 pip show flask | grep Location # 检查 Python 的搜索路径 python3 -c "import sys; print('\n'.join(sys.path))" # 检查是否有多个 pip which -a pip which -a pip3 # 确保用同一个 Python 和 pip python3 -m pip uninstall flask python3 -c "import flask" # 应该报 ModuleNotFoundError15.7 SSL 证书错误
# 错误: # SSL: CERTIFICATE_VERIFY_FAILED # 临时解决(不推荐用于生产) pip install flask --trusted-host pypi.org --trusted-host files.pythonhosted.org # macOS 永久解决 /Applications/Python\ 3.12/Install\ Certificates.command # 或者安装证书 pip install certifi十六、pip 与其他包管理工具对比
| 工具 | 特点 | 适用场景 |
|---|---|---|
| pip | 官方、简单、通用 | 大多数项目 |
| pipenv | pip + 虚拟环境 + 锁文件 | 应用开发 |
| poetry | 依赖管理 + 打包 + 发布 | 库开发、复杂项目 |
| conda | 科学计算、非Python依赖 | 数据科学、机器学习 |
| uv | 极快(Rust编写) | 追求速度 |
| pip-tools | pip 的增强(锁定依赖) | 团队协作 |
# pipenv 示例 pip install pipenv pipenv install flask # 创建虚拟环境 + 安装 pipenv shell # 进入虚拟环境 pipenv lock # 生成 Pipfile.lock # poetry 示例 pip install poetry poetry init # 初始化项目 poetry add flask # 添加依赖 poetry install # 安装所有依赖 poetry shell # 进入虚拟环境 # uv 示例(2024年新工具,极快) pip install uv uv pip install flask # 比 pip 快 10-100 倍 uv venv # 创建虚拟环境十七、最佳实践总结
17.1 项目依赖管理流程
# ✅ 推荐的项目结构: my_project/ ├── venv/ # 虚拟环境(不提交到Git) ├── src/ # 源码 ├── tests/ # 测试 ├── requirements.txt # 生产依赖 ├── requirements-dev.txt # 开发依赖 ├── .gitignore # 包含 venv/ └── README.md # ✅ .gitignore 内容: # venv/ # __pycache__/ # *.pyc # .env # ✅ requirements.txt(生产): # flask==3.0.0 # requests==2.31.0 # sqlalchemy==2.0.23 # ✅ requirements-dev.txt(开发): # -r requirements.txt # pytest==7.4.3 # black==23.11.0 # flake8==6.1.017.2 日常命令速查
# 创建环境 python3 -m venv venv && source venv/bin/activate # 安装包 pip install flask pip install "flask>=3.0,<4.0" pip install -r requirements.txt # 查看 pip list pip show flask pip list --outdated # 升级 pip install -U flask pip install --upgrade pip # 卸载 pip uninstall flask pip uninstall -y -r requirements.txt # 导出 pip freeze > requirements.txt # 检查 pip check # 缓存 pip cache purge # 帮助 pip --help pip install --help17.3 安全建议
# 1. 永远不要在系统 Python 中 pip install(用虚拟环境) # 2. 永远不要 sudo pip install # 3. 生产环境锁定版本(flask==3.0.0 而不是 flask) # 4. 定期更新依赖(pip list --outdated) # 5. 使用 pip check 检查冲突 # 6. 不要安装不信任的包 # 7. 使用 HTTPS 源(默认就是)十八、pip 命令完整列表
pip --help # 输出: # Usage: # pip <command> [options] # # Commands: # install 安装包 # download 下载包(不安装) # uninstall 卸载包 # freeze 导出已安装包(requirements格式) # list 列出已安装包 # show 显示包详细信息 # check 检查依赖冲突 # config 管理配置 # search 搜索包(已禁用) # cache 管理缓存 # index 查看包索引信息 # wheel 构建 wheel 包 # hash 计算包哈希 # completion 生成 shell 自动补全脚本 # debug 显示调试信息 # help 显示帮助 # 查看某个命令的帮助 pip install --help pip list --help