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 侧任何文件,放心测试。

相关推荐
VidDown6 小时前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频
死磕音视频8 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
凤山老林8 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
pride.li10 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
databook10 小时前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
人工智能·python
康小旺10 小时前
把 markitdown 做成 Windows 桌面版:拖进文档就出 Markdown,附 233MB→64MB 打包裁剪全过程
python
程序员老赵10 小时前
Docker 部署 Wiki.js:轻松搭建私有化维基知识库
docker·容器·开源
启观川11 小时前
数据结构与算法-第 3 章 常用算法-贪心算法
数据结构·笔记·python·算法·贪心算法
南笙北梦11 小时前
本地开源大模型多轮对话显存泄漏排查与修复实录
python
小羊没烦恼!11 小时前
如何在IIS6,7中部署ASP.NET网站?
数据库·后端·python·web安全·asp.net