pip-离线安装软件包
1. 导出依赖清单¶
在联网环境中生成 requirements.txt
文件:
pip freeze > requirements.txt
此文件会记录当前环境所有已安装的包及其版本
注意:如果你使用的是虚拟环境,
pip freeze
只会导出该环境中的包。如果你在全局环境中执行此命令,它会导出所有全局安装的包,可能包含不需要的依赖。
导出依赖的替代方法¶
如果你的项目使用了 setup.py
或 pyproject.toml
,可以使用以下命令获取更精确的依赖列表:
# 对于使用 setup.py 的项目
pip install pipreqs
pipreqs /path/to/project
# 对于使用 Poetry 的项目
poetry export -f requirements.txt > requirements.txt
2. 下载离线包¶
使用 pip download
下载所有依赖包:
pip download -d ./offline-packages -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
- 参数说明:
d
: 指定下载目录(如./offline-packages
)r
: 指定依赖文件(requirements.txt
)i
: 使用国内镜像加速(推荐清华、阿里云等镜像源)如何可以访问也可以不加
- 依赖自动处理:该命令会递归下载所有依赖包(包括次级依赖),无需手动查找
平台特定包的处理¶
如果目标环境与下载环境的操作系统或Python版本不同,需要指定平台:
pip download -d ./offline-packages -r requirements.txt --platform manylinux1_x86_64 --python-version 3.8 --implementation cp --abi cp38m
下载wheel包而非源码包¶
优先下载预编译的wheel包可以避免在离线环境中编译的问题:
pip download -d ./offline-packages -r requirements.txt --only-binary=:all:
3. 传输离线文件¶
将整个 offline-packages
目录和 requirements.txt
复制到离线环境(如U盘、内网服务器等)。
创建便携式压缩包¶
tar -czvf offline-packages.tar.gz ./offline-packages requirements.txt
4. 离线安装¶
在离线环境中执行:
pip install --no-index --find-links=./offline-packages -r requirements.txt
- 关键参数:
--no-index
: 禁止从PyPI联网下载--find-links
: 指定本地包目录
使用虚拟环境进行隔离安装¶
# 创建虚拟环境
python -m venv venv
# 激活虚拟环境
# Windows
venv\Scripts\activate
# Linux/Mac
source venv/bin/activate
# 在虚拟环境中安装
pip install --no-index --find-links=./offline-packages -r requirements.txt
5. 常见问题与解决方案¶
缺少编译工具¶
某些包需要在安装时编译,确保离线环境有必要的编译工具: - Windows: Visual C++ Build Tools - Linux: gcc, python-dev, 等
平台不兼容问题¶
如果出现 xxx is not a supported wheel on this platform
错误:
- 确保下载的包与目标环境的操作系统、Python版本和架构匹配
- 考虑在目标环境相似的机器上下载包
依赖解析失败¶
如果出现依赖冲突,可以尝试:
pip install --no-index --find-links=./offline-packages --no-dependencies -r requirements.txt
6. 替代方案¶
使用conda离线安装¶
如果你使用Anaconda或Miniconda,可以创建离线包:
# 创建环境规范文件
conda env export > environment.yml
# 创建离线包
conda pack -n your_env_name -o offline_env.tar.gz
在离线环境中:
mkdir -p target_directory
tar -xzf offline_env.tar.gz -C target_directory
source target_directory/bin/activate
使用Docker容器¶
预先构建包含所有依赖的Docker镜像,然后在离线环境中加载:
# 在联网环境
docker build -t my_python_app .
docker save -o my_python_app.tar my_python_app
# 在离线环境
docker load -i my_python_app.tar
使用pip-tools优化依赖¶
# 安装pip-tools
pip install pip-tools
# 生成精确的依赖
pip-compile requirements.in
# 下载依赖
pip download -d ./offline-packages -r requirements.txt
7. 大型机器学习模型的离线安装¶
对于需要下载大型模型文件的包(如Hugging Face的transformers模型):
-
在联网环境中预先下载模型:
from transformers import AutoModel model = AutoModel.from_pretrained("model_name", cache_dir="./model_cache")
-
将
model_cache
目录复制到离线环境的相应位置 - 在代码中指定
cache_dir
参数指向本地模型目录