怎么基于requirements.txt批量下载Python离线安装包

陈默
陈默
发布时间:2026-10-29| 6人浏览过
原创

本文详细讲解如何使用 pip download 命令基于 requirements.txt 文件批量下载 Python 离线安装包(Wheel 与源码包),涵盖准备依赖清单、同平台与跨平台下载、包目录结构验证及内网离线安装的完整操作步骤与注意事项。

在没有外网访问权限的服务器、内网测试集群或受限企业网络中部署 Python 项目时,通常无法直接执行 pip install 联网拉取依赖。解决这一问题的标准做法,是在有外网连接的环境中,利用 pip download 命令结合 requirements.txt 将项目所需的所有 Wheel 二进制包、源码包及间接依赖完整下载到本地文件夹,再通过物理介质或内部文件服务器将离线包拷贝到目标机器进行本地安装。

一、整体工作流与核心原理

批量下载离线包的核心在于让 pip 解析依赖图并保存安装包文件,而不是解压并安装到当前 Python 环境中。整个离线交付过程分为四个阶段:准备依赖清单、执行批量下载、核对包完整性与类型、传输并在内网目标机执行安装。

怎么基于requirements.txt批量下载Python离线安装包
图 1: 基于 requirements.txt 批量下载与离线安装的整体操作步骤流程图

二、第一步:准备依赖清单 requirements.txt

在开始下载前,必须先获得清晰明确的依赖清单。通常有两种方式生成 requirements.txt:

  • 方式 A(项目指定依赖): 手动列出项目直接引用的核心包及其版本约束,例如 fastapi==0.110.0、uvicorn[standard]==0.29.0。pip download 会自动计算并下载这些包所需的所有间接依赖。
  • 方式 B(导出当前环境完整清单): 在已经经过联调测试的开发或测试环境中,直接导出所有精确版本的包:
pip freeze > requirements.txt

假定准备好的 requirements.txt 内容如下:

requests==2.31.0
pandas==2.2.1
SQLAlchemy==2.0.28

三、第二步:同平台环境下的批量下载

如果下载包的机器与最终内网运行环境的操作系统架构(如 Linux x86_64)和 Python 小版本(如 Python 3.10)完全一致,批量下载最为直接,只需使用 -d(或 --dest)参数指定存放目录。

在有外网的机器上创建存放包的目录并执行下载:

# 创建用于存储离线包的目录
mkdir packages

# 基于 requirements.txt 批量下载所有依赖包及递归子依赖到 packages 目录
pip download -r requirements.txt -d ./packages

下载过程中,pip 会输出类似如下的抓取信息(示例输出):

Collecting requests==2.31.0 (from -r requirements.txt (line 1))
  Downloading requests-2.31.0-py3-none-any.whl (62 kB)
Collecting charset-normalizer<4,>=2 (from requests==2.31.0->-r requirements.txt (line 1))
  Downloading charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (142 kB)
Collecting idna<4,>=2.5 (from requests==2.31.0->-r requirements.txt (line 1))
  Downloading idna-3.6-py3-none-any.whl (61 kB)
Collecting urllib3<3,>=1.21.1 (from requests==2.31.0->-r requirements.txt (line 1))
  Downloading urllib3-2.2.1-py3-none-any.whl (121 kB)
Collecting certifi>=2017.4.17 (from requests==2.31.0->-r requirements.txt (line 1))
  Downloading certifi-2024.2.2-py3-none-any.whl (163 kB)
Successfully downloaded requests pandas SQLAlchemy certifi charset-normalizer idna urllib3 numpy python-dateutil pytz tzdata typing-extensions greenlet
参数提示: 即使 requirements.txt 中只有 3 个直接依赖,pip 也会自动把它们底层依赖的 numpy、urllib3、certifi 等全部下载下来,确保内网安装时不会因缺少子依赖而报错。

四、第三步:跨平台或跨 Python 版本的参数化下载

许多开发者在 macOS(如 Apple Silicon M 芯片 / ARM64)或 Windows 工作站上办公,但目标内网服务器是 Linux(如 CentOS / Ubuntu x86_64)。如果直接执行简单的 pip download,pip 默认只会下载适配当前本地系统的二进制包,拷贝到 Linux 服务器后将无法安装。

针对跨平台场景,必须结合 --platform、--python-version、--implementation 以及 --only-binary=:all: 参数进行精确约束。

怎么基于requirements.txt批量下载Python离线安装包
图 2: 跨平台下载关键参数矩阵及依赖约束说明

跨平台下载常用参数详解:

  • --platform:目标操作系统及架构体系,例如 Linux 常用 manylinux2014_x86_64 或 manylinux_2_17_x86_64;Windows 64 位为 win_amd64。
  • --python-version:目标 Python 大小版本号,写为 310(Python 3.10)或 39(Python 3.9)。
  • --implementation:Python 实现,CPython 标准解释器使用 cp。
  • --abi:应用二进制接口标识,例如 cp310。
  • --only-binary=:all::非常关键的选项。因为跨平台时本地无法为目标系统编译 C/C++ 源码,因此必须强制只拉取编译好的 .whl 二进制包。

五、第四步:解析与核验下载的文件

下载完成后,切勿直接打包传输,应先查看 packages 目录下的文件命名与包格式。Python 离线包通常分为两种结构形态:

怎么基于requirements.txt批量下载Python离线安装包
图 3: 离线安装包结构对比:Wheel 二进制包与源码包的核心区别

在本地终端执行 ls packages/ 查看目录内容:

certifi-2024.2.2-py3-none-any.whl
charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.whl
idna-3.6-py3-none-any.whl
numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.whl
pandas-2.2.1-cp310-cp310-manylinux_2_17_x86_64.whl
python_dateutil-2.9.0.post0-py2.py3-none-any.whl
pytz-2024.1-py2.py3-none-any.whl
requests-2.31.0-py3-none-any.whl
SQLAlchemy-2.0.28-cp310-cp310-manylinux_2_17_x86_64.whl
typing_extensions-4.10.0-py3-none-any.whl
urllib3-2.2.1-py3-none-any.whl

六、第五步:内网离线安装验证与完整闭环

将 requirements.txt 以及下载好的 packages 文件夹打包并通过介质拷贝到内网离线服务器上,解压到例如 /opt/project/ 目录下。

在内网服务器的目标环境中,运行如下命令进行离线批量安装:

# 进入包含 packages 和 requirements.txt 的项目目录
cd /opt/project

# 离线执行安装
pip install --no-index --find-links=./packages -r requirements.txt

关键参数说明:

  • --no-index:完全忽略 PyPI 默认源,禁止发起任何网络 HTTP 请求。若缺包会立即提示未找到,绝不会发生联网超时卡顿。
  • --find-links=./packages:指定从本地某个目录(或 HTML 文件)中寻找符合版本的 .whl 或 .tar.gz 包文件。
  • -r requirements.txt:按照清单定义的依赖关系进行安装,pip 会在本地目录中完成依赖解析与装载。

七、核心要点总结与排错对照表

为了保障基于 requirements.txt 批量下载及安装过程万无一失,下表总结了最容易遇到的异常情况及对应处理方案:

怎么基于requirements.txt批量下载Python离线安装包
图 4: Python 离线安装常见异常与应对策略总结图

只要严格按照“相同平台配置下载”或“精确指定跨平台参数”,配合 pip download -r requirements.txt -d <目录> 与 pip install --no-index --find-links=<目录> -r requirements.txt,即可在完全脱网的隔离生产环境中稳定、高速完成依赖部署。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。