6

我已经使用此答案中描述的方法成功安装了 numpy 和 scipy 。然后我想添加 scikit-learn,所以一开始我尝试添加scikit-learn==0.11到 requirements.txt,当推送到 heroku 时,我收到一条错误消息:

ImportError: liblapack.so.3gf: cannot open shared object file: No such file or directory

所以我已经添加到LD_LIBRARY_PATH我拥有的路径中,liblapack.so.3gf但后来我得到了这个:

ImportError: libgfortran.so.3: cannot open shared object file: No such file or directory

我相信heroku没有fortran编译器,但也许我错了。我该如何解决这个问题?

4

6 回答 6

7

基于这些指示,我刚刚在 heroku 上完成了 scikit-learn 的安装。我很高兴看到不需要获取自定义二进制文件,但是设置一些环境就可以了:)

您可以在我的 wyn buildpack 的 fork 中找到额外的自定义步骤: https ://github.com/ToonTimbermont/heroku-buildpack-python

关键是为 LD_LIBRARY_PATH 设置正确的值: export LD_LIBRARY_PATH=$(pwd)/vendor/lib:$(pwd)/vendor/lib/atlas- base:$(pwd)/vendor/lib/atlas-base/atlas

我还将这些路径添加到 heroku 配置中: heroku config:add LD_LIBRARY_PATH=/app/.heroku/vendor/lib/atlas-base/atlas:/app/.heroku/vendor/lib/atlas-base:/app/.heroku/vendor/lib/

于 2013-01-24T14:50:43.600 回答
4

另一个不错的选择是conda buildpack,它允许您将通过 Anaconda/Miniconda 提供的任何免费 Linux64 包添加到 Heroku 应用程序。一些最受欢迎的软件包包括 numpy、scipy、scikit-learn、statsmodels 和 pandas。虽然 buildpack 使得将包添加到应用程序变得相当简单,但缺点是 buildback 占用了大量空间,并且您必须等待 Anaconda 更新存储库中的库。

如果您在 Heroku 上启动一个新的 Python 应用程序,您可以使用以下命令添加 conda buildpack:

$ heroku create YOUR_APP_NAME --buildpack https://github.com/kennethreitz/conda-buildpack.git

如果您已经在 Heroku 上设置了 Python 应用程序,则可以使用以下命令将 conda buildpack 添加到现有应用程序:

$ heroku config:add BUILDPACK_URL=https://github.com/kennethreitz/conda-buildpack.git

或者,如果您需要按名称指定应用程序:

$ heroku config:add BUILDPACK_URL=https://github.com/kennethreitz/conda-buildpack.git --app YOUR_APP_NAME

要使用 buildpack,您需要在 app 目录中包含两个文本文件,requirements.txt 和 conda-requirements.txt。就像标准的 Python buildpack 一样,requirements.txt 文件列出了应该使用 pip 安装的包。conda-requirements.txt 文件中列出了应使用 conda 安装的软件包。一些最有用的科学软件包包括 numpy、scipy、scikit-learn、statsmodels、pandas 和 cvxopt。可以在repo.continuum.io找到可用 conda 包的完整列表。

例如:

$ cat requirements.txt
gunicorn==0.14.2
requests==0.11.1

$ cat conda-requirements.txt
scipy
numpy
cvxopt

而已!您现在可以将 Anaconda 包添加到 Heroku 上的 Python 应用程序。

于 2015-01-27T02:34:39.343 回答
1

您也许可以在应用程序本身中打包您需要的所有库,但更优雅的解决方案是在 git 上克隆Heroku Python Buildpack,并对其进行修改以包含这些库。然后,您可以指示您的应用程序使用修改后的 buildpack 和--buildpack命令行客户端上的标志。

编辑:我最初没有点击其他答案,但听起来您已经在使用自定义 buildpack。您正在使用的 buildpack 具有各种自定义步骤,可下载自定义二进制文件。二进制文件在 64 位 Debian 下编译。

您应该能够剖析 buildpack 正在使用的其他自定义二进制文件之一,以找出可以使用的二进制文件--prefix./configure构建所需的额外库。这并不容易或不方便,但它应该与 numpy 和 scipy 的工作方式相同。

于 2012-07-24T17:10:55.103 回答
1

如果您像我一样来到这里,在安装 scikit learn 时遇到问题并出现错误,

ImportError: numpy is not installed.
scikit-learn requires numpy >= 1.11.0.

您需要做的是检查本地/开发环境的版本,并在部署时使用该特定版本,甚至是 python 版本。

pip freeze如 zenpoy 或以下所述使用。

import scipy
import sklearn
import numpy

print(scipy.__version__)
print(sklearn.__version__)
print(numpy.__version__)

将此版本专门添加到requirements.txt

scipy==1.4.1
scikit-learn==0.22.2.post1
numpy==1.19.5

heroku设置Python 运行时,将runtime.txt文件添加到应用程序的根目录,声明要使用的确切版本号:

python-3.7.10
于 2021-06-12T17:34:33.430 回答
0

我在 Python3 上为此创建了一个 buildpack:https ://github.com/dwnld/heroku-buildpack-python3-sklearn

于 2014-11-24T21:38:01.613 回答
-1

使用 conda buildpack 并将“nomkl”添加到 conda-requirements.txt 文件以减小 slugsize。

于 2016-06-24T15:58:39.140 回答