Python 在 cloudfoundry 上使用 --enable-shared

Python with --enable-shared on cloudfoundry

我想在 cloudfoundry 实例上部署一个应用程序,该应用程序由一个 Rmarkdown 文件组成,该文件应同时包含 R 和 python 块。我想在 cloudfoundry 上渲染文档,而不是在本地渲染并只推送 HTML 文件。

要使 knitr 与 python 一起使用,它使用 reticulate 包,该包在 docs:

中说明

Note that for reticulate to bind to a version of Python it must be compiled with shared library support (i.e. with the --enable-shared flag).

我尝试使用 cloudfoundry python buildpack 为网状结构提供 python,但出现错误 Python shared library not found, Python bindings not loaded,cloudfoundry 应用程序上的 reticulate::py_discover_config() 给出:

> reticulate::py_discover_config()
python:         /home/vcap/deps/2/bin/python/  # or something very like this
libpython:      [NOT FOUND]

我认为这表明 python 没有 是用 --enable-shared.

编译的

诱人的是,更新日志中有 6 年前的 this line * Add --enable-shared to Python runtime options,但它看起来是针对不再相关的特定版本。

有什么方法可以让我在 cloudfoundry 上获得一个可以与 reticulate 一起使用的 python 版本?理想情况下无需自己从头开始构建它...

我发现我可以使用 reticulate 本身安装 reticulate 乐于使用的 python 版本。在渲染 Rmarkdown 文档之前,我可以使用:

reticulate::install_miniconda()
reticulate::py_install(readLines("requirements.txt"))

这会创建一个符合我所有要求的 conda 环境,并允许我的代码 运行。

缺点是它将 python 安装从应用暂存(在 cloudfoundry 上默认需要 15 分钟完成)转移到应用启动命令(默认需要 60 秒)。我不得不将默认超时增加到 120 秒,以便有足够的时间来安装需求和呈现文档。

根据@DanielMikusa 的评论,我还在 python buildpack 上提出了一个 feature request,希望将来能够启用共享库支持,但这对我现在有效。