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

相关推荐
金銀銅鐵22 分钟前
[Python] 借助 turtle 逐字展示唐诗《金缕衣》
python
InfinitePlus1 小时前
Docker MySQL搭建一主一从
mysql·docker
Python大数据分析@2 小时前
使用大模型MCP采集数据,爬虫已经无门槛
python·网络爬虫
quantdash_cc3 小时前
告别自建 Requests/BS4 网页爬虫:基于 QuantDash 搭建零维保的高性能量化行情流水线
开发语言·爬虫·python·pandas·量化·quantdash
65岁退休Coder3 小时前
LangChain v1.3.4 笔记 - 07 补充:链式调用 LCEL
后端·python·langchain
卷无止境3 小时前
FastAPI 部署在 Nginx 后面到底该怎么配
后端·python
半亩码田3 小时前
C#转Python第3.1篇:Python 的 class 没有访问修饰符?面向对象的另一条路
开发语言·python·c#
Wzx1980124 小时前
python沙箱和docker沙箱你选对了吗?
开发语言·python·docker
Python私教4 小时前
签名 URL 刷新导致审批失效?别急着删掉所有 query
python·安全
CodeDevMaster4 小时前
关于PaddleOCR-VL部署与使用说明
docker·llm