跳转至

pip-离线安装软件包

1. 导出依赖清单

在联网环境中生成 requirements.txt 文件:

pip freeze > requirements.txt

此文件会记录当前环境所有已安装的包及其版本

注意:如果你使用的是虚拟环境,pip freeze 只会导出该环境中的包。如果你在全局环境中执行此命令,它会导出所有全局安装的包,可能包含不需要的依赖。

导出依赖的替代方法

如果你的项目使用了 setup.pypyproject.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模型):

  1. 在联网环境中预先下载模型:

    from transformers import AutoModel
    model = AutoModel.from_pretrained("model_name", cache_dir="./model_cache")
    

  2. model_cache目录复制到离线环境的相应位置

  3. 在代码中指定cache_dir参数指向本地模型目录
回到页面顶部