我已经使用本答案中描述的方法成功安装了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。