wsl端是py312,但是项目是py311, 如何下载py311的依赖包(wheels)

如何实现完全离线部署?

(目前是大文件离线部署,其余依赖在线下载,镜像构建时间为5分钟;之前全部文件在线下载时镜像构建时间是50分钟):

  1. 执行轻量 ubuntu 容器命令 → 增量下载 requirements 所有依赖到现有文件夹wheels;
  2. 独立命令下载 torch/torchaudio/torchvision cu130 三件套;
  3. 放入自制 cuda_toolkit-13.0.2-py3-none-any.whl stub 包;
  4. 离线模拟安装,验证是否 把 requirements 所有依赖 下载完毕;
  5. 执行 docker build 纯离线构建;

问题说明:

WSL 本地 Python3.12,容器目标是 Python3.11,如果下载 requirements 时不带--python-version 311、--platform manylinux_2_28_x86_64,pip 会默认下载适配本地 3.12 环境的 whl,放到 Ubuntu22.04(py3.11)容器里会出现 ABI 不兼容、安装失败。

计划这样写(错误写法):

bash 复制代码
#错误写法
       pip download \
-r requirements.txt \
-d ./wheels \
--extra-index-url https://pypi.tuna.tsinghua.edu.cn/simple \
--platform manylinux_2_28_x86_64 \
--python-version 311 \
--only-binary=:all \
--no-binary :none: \
--trusted-host pypi.tuna.tsinghua.edu.cn

但是报错了,报错原因:

新版 pip 有强制语法互斥规则:

同时启用 --platform + --python-version ➡ 强制要求必须加上 --no-deps

一旦加了--no-deps,就不会自动递归下载子依赖。

之前想用--no-binary :none:绕过的方案在新版 pip 不生效,此路不通,放弃。

以下方案:绕开 pip 这个语法死锁:

一 。轻量临时镜像下载

需要一个 Ubuntu22.04 + python3.11 的环境用来执行 pip download:

bash 复制代码
docker run --rm \
-v $(pwd):/work \
-w /work \
ubuntu:22.04 \
bash -c "
apt-get update && apt-get install -y --no-install-recommends python3.11 python3.11-dev python3-distutils ca-certificates curl;
update-ca-certificates;
ln -sf /usr/bin/python3.11 /usr/bin/python;
curl -fsSL --insecure https://bootstrap.pypa.io/get-pip.py -o /tmp/get-pip.py;
python3.11 /tmp/get-pip.py;
python3.11 -m pip download -r requirements.txt -d ./wheels \
--extra-index-url https://pypi.tuna.tsinghua.edu.cn/simple \
--trusted-host pypi.tuna.tsinghua.edu.cn \
--only-binary=:all
"

--only-binary=:all 会静默丢弃没有 whl 的依赖,不告警、不提醒,离线阶段才爆发错误。存在仅有源码包的依赖时,会丢包。

这条命令只负责下载 requirements 普通依赖;

PyTorch 三件套沿用原来独立的下载命令(不能用这个容器下载 torch+cu130 特殊包)。

二。验证是否下载完全

验证是否把requirement的文件都成功下载到wheels文件夹中:

bash 复制代码
docker run --rm \
-v $(pwd):/work \
-w /work \
ubuntu:22.04 \
bash -c "
apt-get update && apt-get install -y --no-install-recommends python3.11 python3.11-dev python3-distutils ca-certificates curl;
ln -sf /usr/bin/python3.11 /usr/bin/python;
curl -fsSL --insecure https://bootstrap.pypa.io/get-pip.py -o /tmp/get-pip.py;
python3.11 /tmp/get-pip.py;
python3.11 -m pip install -r requirements.txt \
--no-index \
--no-cache-dir \
--find-links=./wheels
"
"

三。关于临时镜像

1. 临时镜像是否占内存, 通常情况下,不会

命令带有 --rm 参数,这是核心保障:

bash 复制代码
docker run --rm

规则:

容器进程正常跑完(安装成功 / 安装报错退出)→ 容器直接彻底销毁

容器内产生的临时 Python 环境、缓存全部删除

不会留下停止状态的僵尸容器

宿主机内存随容器销毁立刻释放

⚠️ 唯一例外:如果中途手动 Ctrl+C强制中断

部分场景下容器来不及执行销毁逻辑,会短暂残留。

2、万一卡住 / 中断,手动清理两条万能指令

① 清理残留容器

bash 复制代码
# 清理所有停止的容器
docker container prune -f

② 清理镜像(可选,如果你不需要这个 ubuntu:22.04 缓存镜像)

bash 复制代码
docker rmi ubuntu:22.04

3、挂载目录安全说明

-v $(pwd):/work 只是只读共享文件

模拟安装只会读取./wheels 里的 whl,不会修改、新增、删除你 Windows 侧任何文件,放心测试。

相关推荐
小大宇1 小时前
python flask框架 SSE流式返回、跨域、报错
开发语言·python·flask
像风一样的男人@2 小时前
python --fastapi推流AI推理
人工智能·python·fastapi
2601_956319882 小时前
最新量化开发卡住,先查规则和流程是否完整
人工智能·python
spider_xcxc2 小时前
Docker 实战:容器化多服务应用,Dockerfile 与 Compose 配置全解析
docker·云原生·eureka·虚拟化·容器化
小小代码狗2 小时前
SQLi-Labs 基础注入实战教程(Less-1 ~ Less-5and Less-9)
服务器·python·php
晚风吹长发3 小时前
Docker使用——Docker容器及相关命令
linux·运维·服务器·docker·容器·架构
nanawinona3 小时前
2026年下半年量化学习,不同基础要查不同缺口
人工智能·python
ShiXZ2133 小时前
Docker Compose 安装与配置指南
运维·docker·容器