在无网络的服务器或内网环境中,执行 pip install -r requirements.txt 时遇到网络错误或SSL证书问题,无法正常安装Python依赖包。
核心思路
在有网络的机器上下载所有依赖包 → 传输到离线机器 → 本地安装
⚠️关键注意:下载机器和离线机器必须满足:
- 操作系统和架构一致(Windows/Linux、32/64位)
方案一:标准pip离线安装(推荐)
1. 有网机器操作
# 下载所有依赖到packages目录pip download -r requirements.txt -d packages# 使用国内镜像加速(推荐)pip download -r requirements.txt -d packages -i https://mirrors.aliyun.com/pypi/simple/
2. 传输文件
将整个 packages 文件夹复制到离线机器(U盘、共享文件夹等)
3. 离线机器安装
pip install --no-index --find-links=./packages -r requirements.txt
方案二:跨平台下载
当有网机器和离线机器系统不同时(如Mac下载Windows包):
# 指定目标平台和Python版本pip download -r requirements.txt -d packages \ --platform win_amd64 \ --python-version 311 \ --only-binary=:all: \ -i https://mirrors.aliyun.com/pypi/simple/
平台参数说明:
win_amd64: Windows 64位manylinux2014_x86_64: Linux 64位macosx_11_0_arm64: macOS ARM架构
方案三:Conda环境打包(最简单)
1. 有网机器操作
# 安装conda-packconda install -c conda-forge conda-pack# 激活环境并安装依赖conda activate your_envpip install -r requirements.txt# 打包整个环境conda pack -n your_env -o env.tar.gz
2. 离线机器操作
# 创建环境目录mkdir -p ~/anaconda3/envs/your_envcd ~/anaconda3/envs/your_env# 解压环境包tar -xzf env.tar.gz# 激活环境conda activate your_env
方案四:pip-download工具
1. 安装工具
pip install pip-download
2. 下载依赖
# 自动处理依赖关系pip-download -r requirements.txt -d packages
3. 离线安装
pip install --no-index --find-links=packages -r requirements.txt
常见问题排查
问题1:找不到匹配的版本
原因:下载的包平台不匹配
解决:
# 检查下载的包ls packages/*.whl# 查看文件名中的平台标识# 示例:numpy-1.24.0-cp311-cp311-win_amd64.whl# 包名-版本-Python版本-平台.whl
确保包名中包含:
- Windows:
win_amd64 或 win32
问题2:依赖包不完整
解决:
# 下载时包含所有依赖pip download -r requirements.txt -d packages --no-cache-dir
问题3:版本冲突
解决:修改 requirements.txt,放宽版本限制
# 从严格版本opencv-python==4.8.1.78# 改为范围版本opencv-python>=4.8.0,<5.0.0
验证安装
# 查看已安装的包pip list# 验证特定包python -c "import opencv; print(opencv.__version__)"
最佳实践
1. 创建离线包仓库
# 定期更新离线包库pip download -r requirements.txt -d /path/to/repo# 使用时指定仓库pip install --no-index --find-links=/path/to/repo package_name
2. 使用requirements.txt锁定版本
# 导出精确版本pip freeze > requirements.txt# 确保环境一致性
3. 建立内网PyPI镜像
使用 devpi 或 pypiserver 搭建内网PyPI服务器:
# 安装pypiserverpip install pypiserver# 启动服务pypi-server -p 8080 ./packages# 客户端使用pip install -i http://internal-server:8080/simple/ package_name
总结
选择合适的方案,可以高效解决Python离线安装难题。