本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

在Docker容器中构建的Python musl wheel,用于导入多阶段构建。
许多Python模块目前没有预构建的musl wheel,特别是对于非x64架构。这会导致Docker中的Python构建缓慢,因为当镜像构建时,没有可用wheel的模块需要从源代码构建。
本项目生成的Docker镜像包含wheel文件,镜像标签指定了模块和Python版本(旧镜像标签中还包含架构)。这些镜像旨在用作Docker多阶段构建的一部分,为Python阶段提供预构建的wheel。镜像包含标签中指定的模块及其所有依赖的wheel。
[!NOTE] 这些镜像主要用于我自己的Docker镜像,避免每次对Python镜像进行缓存破坏更改时都需要编译模块。此仓库不会是全面的wheel集合。
提供两种不同类型的wheel:
包含共享库的wheel
这些wheel由pypa/auditwheel处理,应符合相关PEP 656规范,具有最高的可移植性。
包含这些wheel的Docker镜像推送到moonbuggy2000/python-musl-wheels,wheel文件名中包含-musllinux。
不包含共享库的wheel
这些wheel通过依赖系统库而非捆绑可能重复的共享库,生成更小的最终Docker镜像。但需要系统库存在且与wheel构建时依赖的库兼容,因此可移植性较低。
包含这些wheel的Docker镜像推送到moonbuggy2000/python-alpine-wheels,wheel文件名中包含-linux。
当前wheel镜像基于Alpine 3.19和musl 1.2构建,部分musl 1.1的wheel可在wheels/目录中找到。
[!NOTE] 若PyPi上已有某架构的预构建wheel,“不包含共享库”的镜像可能会使用这些wheel而非自行构建。因此,特别是对于
amd64和arm64架构,部分“python-alpine-wheels”镜像中的wheel可能实际包含共享库。本仓库的目的是填补PyPi预构建wheel在更多架构上的空白。构建不需要的wheel会扩大这一差距,且不包含共享库节省的磁盘空间有限,难以证明构建时间的合理性。
本仓库的wheels/目录中包含可直接使用的wheel文件。此外,Docker镜像可作为其他镜像构建过程的一部分拉取使用。
对于使用SSL库的模块,wheels/目录中的wheel文件默认应为OpenSSL构建版本。LibreSSL构建版本通常可通过Docker镜像获取。
较新的构建仅为每个wheel推送单个多平台标签,格式如下:
moonbuggy2000/python-musl-wheels:<module><module_version>-py<python_version>
示例:
moonbuggy2000/python-musl-wheels:***graphy45.0.1-py3.8
旧版本构建为每个架构推送独立镜像,格式如下:
moonbuggy2000/python-musl-wheels:<module><module_version>-py<python_version>-<arch>
示例:
moonbuggy2000/python-musl-wheels:***graphy3.4.8-py3.8-armv7
ARG PYTHON_VERSION="3.8" # 从多平台镜像获取***graphy模块 FROM --platform="${TARGETPLATFORM}" \ "moonbuggy2000/python-musl-wheels:***graphy45.0.1-py${PYTHON_VERSION}" \ AS mod_***graphy # 或从旧版单架构镜像获取 FROM "moonbuggy2000/python-musl-wheels:***graphy3.4.8-py${PYTHON_VERSION}-armv7" \ AS mod_***graphy # 获取其他模块 FROM --platform="${TARGETPLATFORM}" \ "moonbuggy2000/python-musl-wheels:some-other-module1.0.0-py${PYTHON_VERSION}" \ AS mod_some_other # 构建Python应用镜像 FROM "arm32v7/python:${PYTHON_VERSION}" WORKDIR "/wheels" COPY --from=mod_***graphy / ./ COPY --from=mod_some_other / ./ WORKDIR "/app" # .. 设置虚拟环境等 .. RUN python3 -m pip install /wheels/* # 或 RUN python3 -m pip install --find-links /wheels/ ***graphy some_other_module # .. 其他步骤 ..
./build.sh <module><module_version>-py<python_version>-<arch>
除./build.sh <module>外,其他参数均为可选。<module>可包含-openssl或-libressl后缀(如适用)。
目前,-libressl构建不支持s390x架构,因为Alpine包仓库中没有libressl-dev。
若未提供<module_version>,将构建PyPi上的最新版本。若省略<python_version>,将使用Docker Hub官方Python仓库的最新版本。若未指定<arch>,将构建所有可能的架构。
要为所有默认Python版本(在_build.sh_中定义)构建模块,可使用pyall作为py<python_version>。
可通过向_build.sh_传递多个参数一次构建多个模块。
_build.sh_中内置了一些默认模块和Python版本,可通过特殊构建参数使用:
all - 为所有默认Python版本构建所有默认模块core - 为所有默认Python版本构建核心默认模块(适用于其他模块常用的依赖,确保在all构建时可用)check - 检查PyPi上是否有默认模块的新版本,然后退出不开始构建update - 与check类似,但继续为所有默认Python版本构建新版本这些构建应作为_build.sh_的唯一参数独立执行。它们将构建包含和不包含共享库的两种wheel。
远程仓库的数据在本地缓存24小时,因此check的输出在构建和推送模块后不会立即变化。必要时可使用CLEAN_CACHE(见下文)清除缓存。
构建脚本使用环境变量确定某些行为,特别是与Docker Hub推拉相关的操作。
最常用的环境变量如下:
| 变量 | 默认值 | 描述 |
|---|---|---|
| DO_PUSH | false | 推送到Docker Hub |
| NO_BUILD | false | 跳过Docker构建阶段 |
| NOOP | false | 空运行,不构建或推送 |
| NO_SELF_PULL | false | 不从Docker Hub或本地拉取现有匹配wheel |
| NO_PULL_WHEELS | false | 不从Docker Hub或本地拉取任何wheel |
| WHEELS_FORCE_PULL | false | 即使本地存在,也从Docker Hub拉取现有匹配wheel |
| BUILD_NO_CACHE | false | 构建时不使用缓存层 |
| NO_BINARY | false | 不使用现有二进制wheel,强制构建 |
| SHARED | false | 构建包含共享库的wheel |
| NO_SHARED | false | 构建不包含共享库的wheel |
| BUILD_BOTH | false | 同时构建两种类型的wheel |
| CLEAN_CACHE | false | 清除本地缓存并为_all_/core/check/_update_拉取新数据 |
| PYPI_INDEX | https://pypi.org/simple | pip的索引URL,适用于运行缓存代理的情况 |
这些变量的命名目前不够清晰一致,未来可能会调整。
默认行为是构建包含共享库的wheel,将wheel输出到主机的wheels/目录,且不推送任何镜像到Docker Hub。
# 最新***graphy,OpenSSL,最新Python,所有架构 ./build.sh ***graphy # 或 ./build.sh ***graphy-openssl # 最新***graphy,LibreSSL,最新Python,amd64架构 # 推送到Docker仓库 DO_PUSH=1 ./build.sh ***graphy-libreSSL-amd64 # ***graphy 36.0.1,OpenSSL,所有默认Python版本,amd64架构 # 不捆绑共享库 NO_SHARED=1 ./build.sh ***graphy-openssl36.0.1-pyall-amd64 # 同时构建多个模块 ./build.sh ***graphy-openssl-py3.9 cffi1.15.1-armv7 pycparser toml-pyall # 所有默认模块,所有默认Python版本,所有架构 # 从源码构建,同时构建两种类型的wheel # 并推送到Docker仓库 DO_PUSH=1 ./build.sh all
构建系统通常能够使用适当格式的镜像标签构建任何请求的wheel。
默认情况下,wheel在Docker容器中通过以下命令构建:python3 -m pip wheel -w "${WHEELS_DIR}" "${MODULE_NAME}==${MODULE_VERSION}"
特定wheel所需的默认构建设置之外的任何配置,可通过可选的scripts/<module_name>.sh文件(与镜像标签中的<module_name>匹配)处理。这是安装Python/pip不会安装的构建依赖(如通过apk、make或wget)的适当位置。
若存在此文件,mod_build函数将在Dockerfile中的pip wheel命令之前立即调用。
可通过在scripts/<module_name>.sh文件中放置自定义命令并设置WHEEL_BUILT_IN_SCRIPT来覆盖Dockerfile中的pip wheel命令,以防止执行默认命令。
mod_depends函数在检出后由构建系统调用,从本仓库获取任何所需模块(若未找到则回退到PyPi),这些依赖将在Dockerfile开始构建模块前安装。
示例可参见scripts/paramiko.sh。
GitHub: <[***]>
Docker Hub:
相关项目:

免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429