PyPI 镜像源选择与 pipenv/poetry 加速配置(含实战与避坑)
这是一份面向国内网络环境的 Python 包管理加速实用指南:从如何选镜像到 pip
的全局/项目级配置,再到 pipenv
与 poetry
的最佳实践与回滚方法,力求一步到位,适合直接发在论坛给同学收藏。
一、先选镜像:怎么选、选谁
挑镜像的三条硬标准:
-
HTTPS 支持(优先级最高)。避免降级到 HTTP +
--trusted-host
带来的中间人风险。 -
同步频率/可用性。镜像更新是否“准时”,状态是否可查。
-
兼容 PEP 503 Simple API。也就是 URL 末尾常见的
/simple/
索引。
国内常用、长期维护、支持 HTTPS 的镜像(列几个主流,够用且可靠):
-
清华 TUNA:
https://pypi.tuna.tsinghua.edu.cn/simple
(镜像说明页含临时/永久用法与同步频率) 。(清华大学开源软件镜像站) -
阿里云:
https://mirrors.aliyun.com/pypi/simple/
(阿里云公开 PyPI 索引)。(阿里云镜像站) -
腾讯云:
https://mirrors.cloud.tencent.com/pypi/simple/
(目录可见,活跃同步)。 (腾讯云镜像) -
中国科大 USTC:
https://mirrors.ustc.edu.cn/pypi/simple
(官方文档含一键设为默认命令)。 (mirrors.ustc.edu.cn) -
豆瓣:务必用
https://pypi.doubanio.com/simple/
,不是douban.com
;且尽量避免 HTTP 版本。(Stack Overflow, GitHub)
小提示:部分镜像站提供状态页/更新时间戳,遇到“某个包刚发布且镜像暂未同步”时,可临时切回官方 PyPI 兜底。(mirrors.ustc.edu.cn)
二、pip
配置镜像:临时用 & 永久用
2.1 临时使用(单次安装)
# 任意系统通用
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple <package>
等价于把 --index-url
指向镜像的 /simple/
索引。(pip.pypa.io)
2.2 永久设置(推荐)
使用 pip config
写入配置,而不是手改文件路径,跨平台最稳:
# 设为默认索引(全局作用域)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 如需附加一个“补充索引”(不覆盖默认)
pip config set global.extra-index-url https://pypi.org/simple
# 查看生效结果(可带 -v 显示加载的配置文件路径)
pip config list -v
pip config
的键名写法为 global.index-url
、global.extra-index-url
等,覆盖所有命令;配错了可用 pip config unset ...
撤销。(pip.pypa.io, Stack Overflow)
文件位置说明:
pip config
会写入系统约定位置(如 Linux~/.config/pip/pip.conf
、macOS~/Library/Application Support/pip/pip.conf
、Windows%APPDATA%\pip\pip.ini
),无需记路径也能管理配置。(Thomas Suedbroecker's Blog)
2.3 requirements.txt
项目内声明(可选)
也可以在 requirements.txt
开头显式声明:
--index-url https://pypi.tuna.tsinghua.edu.cn/simple
# --extra-index-url https://pypi.org/simple
Django==5.1.1
适合需要把“镜像约定”随项目共享/版本化的团队。(Stack Overflow)
安全提醒:尽量用 HTTPS。除非内网或特殊场景,避免
--trusted-host
+ HTTP。豆瓣请用doubanio.com
的 HTTPS 域名。(Stack Overflow)
三、pipenv
:两种镜像姿势(参数/环境变量)
你可以一次性带参数,也可以设默认环境变量。
3.1 一次性覆盖(命令带镜像)
# 安装 / 更新 / 同步 / 生成锁文件 都可带镜像
pipenv install --pypi-mirror https://mirrors.aliyun.com/pypi/simple/
pipenv update --pypi-mirror https://mirrors.aliyun.com/pypi/simple/
pipenv sync --pypi-mirror https://mirrors.aliyun.com/pypi/simple/
pipenv lock --pypi-mirror https://mirrors.aliyun.com/pypi/simple/
--pypi-mirror
会把默认的 PyPI 替换为你指定的镜像用于本次操作。(pipenv.pypa.io)
3.2 设默认(项目或全局)
项目级推荐写在 .env
(pipenv 会自动加载):
# .env
PIPENV_PYPI_MIRROR=https://pypi.tuna.tsinghua.edu.cn/simple
随后直接 pipenv install
即走镜像。也可在 shell 中 export PIPENV_PYPI_MIRROR=...
。(pipenv.pypa.io)
补充:
pipenv install -i/--index
与--pypi-mirror
的区别在于前者是目标索引,后者是替换默认 PyPI 的快捷方式;通常只需要--pypi-mirror
/PIPENV_PYPI_MIRROR
。(Stack Overflow)
3.3 锁文件 & 缓存小贴士
若切换镜像后解析异常或哈希冲突,可清理缓存并重锁:
pipenv lock --clear --pypi-mirror https://pypi.tuna.tsinghua.edu.cn/simple
(--clear
会清理 pipenv/pip 缓存,常用来排疑。)(PyPI)
四、poetry
:把镜像加为「源」,并控制优先级
poetry
的做法是为项目添加“源(source)”并设置优先级。自 1.5 起可用 primary / supplemental / explicit
三档(没有写 priority
的源,默认视为 primary
)。核心规则:有了至少一个 primary,就会禁用内置的隐式 PyPI;若仍想用 PyPI,需要显式把 PyPI 也配置成一个源并设定优先级。(Poetry)
4.1 只用镜像(把镜像设为 primary)
# 在项目里添加清华镜像为 primary(最高优先)
poetry source add --priority=primary tsinghua https://pypi.tuna.tsinghua.edu.cn/simple/
# 查看源列表与优先级
poetry source show
此时隐式 PyPI 被禁用,仅从镜像解析。(Poetry)
4.2 用镜像优先 + PyPI 兜底(推荐)
# 1) 镜像为 primary
poetry source add --priority=primary tsinghua https://pypi.tuna.tsinghua.edu.cn/simple/# 2) 让 PyPI 也加入源,并设定优先级(示例:作为 supplemental/fallback)
poetry source add --priority=supplemental pypi
poetry
允许对 内置的 PyPI 设置优先级(命令名就叫 pypi
,无需 URL);按官方顺序,安装时会先查 primary 源,再查 supplemental 源。这样镜像优先、官方兜底,减少“镜像尚未同步”的偶发失败。(Poetry)
说明:
explicit
只对显式声明source
的依赖生效;一般不用于加速镜像场景。(Poetry)
4.3 回滚/移除
# 移除某个自定义源(比如切回纯 PyPI)
poetry source remove tsinghua
# 如需把 PyPI 设回最高优先(可选)
poetry source add --priority=primary pypi
(source remove
会从 pyproject.toml
清除配置。)(Poetry)
4.4 锁文件与缓存
切换源后,希望不升级依赖、只“重算锁文件”:
poetry lock --no-update
poetry install --sync
若遇到缓存或解析异常,可按仓名清缓存,例如:
poetry cache clear PyPI --all
(可 poetry cache list
查看可清理的仓名。)(Fig, Poetry)
五、团队/CI 的几条经验法则
-
优先全局 pip 配置 + 项目内声明二选一。团队若统一办公网络,推荐用全局
pip config set global.index-url ...
;若开源/跨网络协作,建议在项目内声明(requirements.txt
或poetry source
),保证可复现。(pip.pypa.io) -
镜像优先 + 官方兜底。
pip
可用extra-index-url
;poetry
用primary + supplemental
;pipenv
建议遇到少量“镜像未同步”的包时临时--pypi-mirror
指向官方。(pip.pypa.io, Poetry) -
尽量避免 HTTP 与
--trusted-host
。确有私有/内网需求时再使用。关于豆瓣域名,务必使用pypi.doubanio.com
的 HTTPS。(Stack Overflow) -
锁文件在变更源后要刷新:
pipenv lock --clear
/poetry lock --no-update
,再安装。(PyPI, Fig)
六、速查清单(复制即用)
pip:
# 设默认镜像
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 保留官方兜底
pip config set global.extra-index-url https://pypi.org/simple
# 撤销
pip config unset global.index-url
pip config unset global.extra-index-url
(pip.pypa.io)
pipenv:
# 临时
pipenv install --pypi-mirror https://mirrors.aliyun.com/pypi/simple/
# 项目默认(.env)
echo 'PIPENV_PYPI_MIRROR=https://pypi.tuna.tsinghua.edu.cn/simple' >> .env
# 疑难清缓存并重锁
pipenv lock --clear --pypi-mirror https://pypi.tuna.tsinghua.edu.cn/simple
(pipenv.pypa.io)
poetry:
# 镜像优先 + PyPI 兜底
poetry source add --priority=primary tsinghua https://pypi.tuna.tsinghua.edu.cn/simple/
poetry source add --priority=supplemental pypi
# 查看 / 移除 / 重锁
poetry source show
poetry source remove tsinghua
poetry lock --no-update && poetry install --sync
(Poetry, Fig)
最后结语
镜像不是银弹,但在国内环境下,合理选择镜像 + 正确配置工具链,能把“装包慢/网络抖”这类无谓的时间损耗降到最低。
-
单机/命令行优先
pip config
; -
项目/团队用
pipenv
的--pypi-mirror
或.env
与poetry source
的优先级机制; -
永远保留“回滚到官方”的路径。
按上面做,你的 Python 依赖安装速度和成功率会有立竿见影的提升。若你们团队用到了公司内网的私有仓库,也可以把本文的命令照搬,换成内网源即可。祝装包丝滑 🚀