如何在heroku雪松上安装scikit学习



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

基于这些指针,我刚刚在heroku上完成了scikit-learn的安装。我很高兴看到没有必要获得自定义的二进制文件,但设置一些环境做到了:)

你可以在我的wyn构建包分支中找到额外的自定义步骤: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/

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

如果你正在Heroku上启动一个新的Python应用程序,你可以使用以下命令添加conda构建包:

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

如果你已经在Heroku上安装了一个Python应用程序,你可以使用以下命令将conda构建包添加到现有的应用程序中:

$ 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,您需要在应用程序目录中包括两个文本文件requirements.txt和conda-requirements.txt。与标准Python buildpack一样,requirements.txt文件列出了应该使用pip安装的包。应使用conda安装的程序包列在conda-requirements.txt文件中。一些最有用的科学包包括numpy、scipy、scikit-learn、statsmodels、panda和cvxopt。可用conda包的完整列表可以在repo.continuum.io.上找到

例如:

$ cat requirements.txt
gunicorn==0.14.2
requests==0.11.1
$ cat conda-requirements.txt
scipy
numpy
cvxopt

就是这样!现在,您可以在Heroku上将Anaconda软件包添加到Python应用程序中。

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

编辑:我最初没有点击另一个答案,但听起来你已经在使用自定义构建包了。您使用的构建包有各种自定义步骤,可以下载自定义二进制文件。二进制文件是在64位Debian下编译的。

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

如果你像我一样在安装scikit时遇到问题,请学习并出错,

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

您要做的是检查本地/dev/环境的版本,并在部署时使用特定的版本,甚至是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

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

python-3.7.10

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

使用conda-buildpack并将"nomkl"添加到conda-requirements.txt文件中,以获得slugsize。

相关内容

  • 没有找到相关文章

最新更新