部署 Python,需要永远为密码学构建轮子

Deploying Python, takes forever to build wheel for cryptography

我是 运行 Heroku 中的一个 Django Python 项目,为了支持 Python 加密包,我的 dockerfile 包含首先安装非 Python 该包的依赖项:

run apk add openssl-dev cargo

然后我的构建日志显示部署构建了各种轮子。密码学轮需要几分钟来构建:

  Building wheel for cryptography (PEP 517): started
  Building wheel for cryptography (PEP 517): still running...
  Building wheel for cryptography (PEP 517): still running...
  Building wheel for cryptography (PEP 517): finished with status 'done'
  Created wheel for cryptography: filename=cryptography-3.4.7-cp38-cp38-linux_x86_64.whl size=534047 sha256=8c3212278fa23bad7ecfbc54d036e8d35ba9308479d87e8ec39697aed26095dc

是否有任何类型的预编译轮或 buildpack 或类似的东西可以用来加快我的部署速度?

根据您的 apk 命令,您很可能是 运行 高山 Linux。 Alpine 使用 musl 作为其 libc 实现,这在历史上阻止了 cryptography 项目上传二进制轮子。然而,随着 PEP 656 的接受(以及 auditwheel、pypa/manylinux 容器和 pypa/warehouse 允许上传的大量后续工作),我们现在可以上传 musllinux wheels。 cryptography 于 2021 年 9 月 19 日上传了密码学 3.4.8(x86_64 arch)的轮子。

要获得这个轮子有两个先决条件:

  1. 您需要升级到最新的pip。没有早于 21.2.4 的版本支持 musllinux 轮子。
  2. 您需要确保安装的密码系统 >= 3.4.8。旧版本没有这些轮子。

如果您满足这些要求,那么 pip install cryptography 将不再需要在 Alpine 上使用编译器(rust 或 gcc/clang)。