如何在heroku雪松上安装scikit-learn?

时间:2012-07-24 17:07:11

标签: python heroku scikit-learn

我使用this回答中描述的方法成功安装了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编译器,但也许我错了。我该如何解决这个问题?

6 个答案:

答案 0 :(得分: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/

答案 1 :(得分: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安装的软件包列在conda-requirements.txt文件中。一些最有用的科学软件包包括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应用程序中。

答案 2 :(得分:1)

您可能能够在应用程序本身中打包所需的所有库,但更优雅的解决方案是在git上克隆Heroku Python Buildpack,并修改它以包含库。然后,您可以指示您的应用程序在命令行客户端上使用带有--buildpack标志的已修改的buildpack。

编辑:我最初没有点击查看其他答案,但听起来你已经在使用自定义buildpack了。您正在使用的buildpack有各种custom steps下载custom binaries。二进制文件是在64位Debian下编译的。

您应该能够剖析buildpack用于查找--prefix的其他自定义二进制文件,以查找./configure并构建所需的额外库。这不是简单或方便,但它应该像numpy和scipy一样工作。

答案 3 :(得分:1)

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

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

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

使用 zenpoy 或以下提到的 pip freeze

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

herokuset the Python runtime 中,将 runtime.txt 文件添加到应用的根目录,声明要使用的确切版本号:

python-3.7.10

答案 4 :(得分:0)

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

答案 5 :(得分:-1)

使用conda buildpack并添加' nomkl'到conda-requirements.txt文件以获得sluizeize。