Pybind11 模块无法部署到 heroku



我正在尝试将一个内置的破折号应用程序部署到heroku。此应用程序使用用 c++ 编写的模拟代码,该代码使用 pybind 11 作为 python 模块导入。当我上传编译的代码时,我在查看 heroku 日志时收到以下错误消息

ImportError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /app/simulation_module_name.so)

我认为这意味着在我的机器上使用 pybind11 编译的代码与我尝试部署到的机器不兼容。

我的下一个尝试是使用 setup.py 和 cmake 直接在 heroku 服务器上构建模块,但这需要来自 boost 库的函数,这些函数为>1GB,所以我无法通过 git 上传它们。我还尝试仅上传相关的 boost 头文件,以及相关的 cmake,以便

set(include_dir "lib")
set(source_dir "src")
# Boost
list(APPEND include_dirs ${include_dir}/boost)
set(header_files
${include_dir}/boost/math/tools/minima.hpp
${include_dir}/boost/math/constants/constants.hpp
${include_dir}/boost/math/tools/roots.hpp
${include_dir}/boost/math/tools/tuple.hpp
)
# Pybind11
add_subdirectory(${include_dir}/pybind11)
include_directories(${source_dir} ${include_dirs})
pybind11_add_module(simulation_module_name ${header_files} "${source_dir}/simulation_module.cpp")

#include "minima.hpp"
#include "constants.hpp"
#include "roots.hpp"

但是我收到了错误:

fatal error: minima.hpp: No such file or directory
remote:             #include "minima.hpp"
remote:                      ^~~~~~~~~~~~

这三种选择中的任何一种都可能吗?

  1. 获取 heroku dynos 以运行我在机器上编译的 pybind11 模块
  2. 上传已安装的提升库(超过大小限制(并在 heroku 服务器上编译
  3. 使用标头函数并在 heroku 服务器上进行 cmake 和编译(正如我在这里尝试但失败的那样(

让 heroku dynos 运行我在机器上编译的 pybind11 模块

为此,您需要在 linux 版本上编译共享库,至少使用相同或较旧版本的 GLIBC。一种可能性是在 docker 映像匹配中编译您的二进制文件,或者早于 Heroku 使用的任何 Linux 发行版。或者,我还建议查看此处的manylinux10manylinux14映像,这些映像专为解决此跨发行版构建/共享问题而设计,并包含许多必要的构建工具。

最新更新