如何构建一个带有 c 扩展名的 python 包作为 docker 的轮子

How to build a python package with a c extension as a wheel for docker

我正在尝试构建一个带有 c 扩展名的 python 包,以便在 Docker 容器中使用。

我创建一个 python 轮子如下:

python install bdist_wheel

包裹看起来(或多或少)像

cpack
  __init__.py
  /cpp
  __init__.py
  c_extension.cpython-37m-x86_64_linux-gnu.so
 ...

并使用以下 Docker 文件。

FROM python:3.8-slim-buster

WORKDIR /home/user

COPY --chown=user:user requirements.txt /tmp/requirements.txt

RUN python -m venv user

RUN user/bin/pip install -r /tmp/requirements.txt 

RUN user/bin/pip install wheel
RUN user/bin/pip install my_c_package-0.0.1-py3-none-any.whl

USER user

...

当我在本地安装 my_c_package-0.0.1-py3-none-any.whl 时没有问题,但是在 docker 上我得到

import cpack
...
ModuleNofFoundError: No module named cpack.cpp.c_extension

由于它在本地运行良好,我不清楚缺少什么?

更新扩展以在扩展的构建中使用 python 3.8,如注释中的 phd 所示,确保扩展被 python 3.8 正确拾取。