我使用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编译器,但也许我错了。我该如何解决这个问题?
答案 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
在 heroku
到 set 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。