【离线安装python包的方法】
通过以下步骤实现本地下载依赖包并离线传输到服务器安装:
步骤 1:在本地下载所有依赖包
使用 pip download
命令将 requirements.txt
中的包及其依赖下载到本地目录(例如 ./packages
):
pip download -r requirements.txt -d ./packages
关键注意事项:
-
平台和Python版本兼容性:
- 如果服务器环境与本地环境不同(例如服务器是 Linux,本地是 Windows),需指定服务器的平台和 Python 版本。例如:
pip download \--only-binary=:all: \--platform manylinux2014_x86_64 \ # 替换为服务器的平台标签--python-version 3.10 \ # 替换为服务器的Python版本-r requirements.txt \-d ./packages
- 可用平台标签列表:https://peps.python.org/pep-0600/#supported-platforms
- 如果服务器环境与本地环境不同(例如服务器是 Linux,本地是 Windows),需指定服务器的平台和 Python 版本。例如:
-
生成哈希校验(可选):
pip hash -r requirements.txt > requirements.hash
上传
requirements.hash
到服务器后,安装时校验包完整性。
步骤 2:将依赖包传输到服务器
将本地 packages
目录和 requirements.txt
上传到服务器:
# 使用 scp(示例)
scp -r ./packages user@server:/path/to/project/
scp requirements.txt user@server:/path/to/project/
步骤 3:在服务器上离线安装
-
创建并激活虚拟环境:
python -m venv myenv source myenv/bin/activate
-
离线安装依赖包:
pip install --no-index --find-links=./packages -r requirements.txt
验证安装:
pip list # 检查包是否全部安装
常见问题解决
-
依赖缺失:
- 确保本地下载时已包含所有依赖,可用
--no-deps
排除测试,但通常不建议。 - 在本地模拟服务器环境下载(推荐使用 Docker 容器)。
- 确保本地下载时已包含所有依赖,可用
-
平台不兼容错误:
- 使用 Docker 在容器内下载正确的包:
docker run -v $(pwd):/app python:3.10-slim \sh -c "pip download -r /app/requirements.txt -d /app/packages"
- 使用 Docker 在容器内下载正确的包:
完整脚本示例
# 本地操作:下载依赖包
pip download -r requirements.txt -d ./packages# 传输到服务器
scp -r ./packages user@server:/project/
scp requirements.txt user@server:/project/# 服务器操作:安装
ssh user@server "cd /projectpython -m venv myenvsource myenv/bin/activatepip install --no-index --find-links=./packages -r requirements.txt
"
通过这种方式,你可以高效地在离线环境中部署 Python 依赖。
你可以通过以下方法快速获取服务器的平台标签(如 manylinux2014_x86_64
):
方法 1:直接查看系统信息
步骤 1:查看系统架构
uname -m
- 输出为
x86_64
或aarch64
(最常见):x86_64
→ 对应_x86_64
后缀aarch64
→ 对应_aarch64
后缀
步骤 2:检查 glibc 版本
ldd --version | head -n1
- 输出示例:
ldd (GNU libc) 2.17
- 根据 glibc 版本匹配平台标签:
- glibc ≥ 2.17 →
manylinux2014
- glibc ≥ 2.12 →
manylinux2010
- glibc < 2.12 →
manylinux1
- glibc ≥ 2.17 →
组合结果
- 例如:
manylinux2014_x86_64
方法 2:使用 Python 脚本获取兼容标签
运行以下 Python 代码直接列出所有支持的平台标签:
python -c "
import pip._internal.utils.compatibility_tags as tags;
print('\n'.join([str(t) for t in tags.get_supported()]))"
- 输出示例(关注
manylinux
开头的标签):manylinux2014_x86_64 manylinux2010_x86_64 manylinux1_x86_64 ...
方法 3:通过 pip debug
命令
pip debug --verbose | grep "Compatible tags"
- 输出示例:
Compatible tags: manylinux2014_x86_64, manylinux2010_x86_64, ..., linux_x86_64
常见 Linux 平台标签速查表
系统架构 | glibc 版本 | 推荐平台标签 |
---|---|---|
x86_64 | ≥ 2.17 | manylinux2014_x86_64 |
x86_64 | ≥ 2.12 | manylinux2010_x86_64 |
x86_64 | < 2.12 | manylinux1_x86_64 |
aarch64 | ≥ 2.17 | manylinux2014_aarch64 |
ARMv7 | ≥ 2.17 | manylinux2014_armv7l |
完整操作示例
假设服务器是 x86_64 架构 + glibc 2.28,则使用:
pip download \--only-binary=:all: \--platform manylinux2014_x86_64 \--python-version 3.10 \-r requirements.txt \-d ./packages
验证下载的包
检查下载的 .whl
文件名是否包含目标平台标签:
ls packages/*.whl
- 正确示例:
numpy-1.24.4-cp310-cp310-manylinux2014_x86_64.whl
注意事项
-
如果无法确定平台标签:
- 使用 Docker 在容器内下载(确保与服务器环境一致):
docker run --rm -v $(pwd):/app python:3.10-slim \bash -c "pip download -r /app/requirements.txt -d /app/packages"
- 使用 Docker 在容器内下载(确保与服务器环境一致):
-
混合架构场景:
- 如果服务器同时支持多种平台(如
manylinux1
和manylinux2014
),直接使用更通用的标签(如manylinux1
)。
- 如果服务器同时支持多种平台(如
通过以上方法,你可以精准匹配服务器的平台标签,避免因环境差异导致的安装失败。