【问题标题】:How to install scikit-learn on heroku cedar?如何在 heroku cedar 上安装 scikit-learn?
【发布时间】:2012-07-23 01:34:39
【问题描述】:

我已经使用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编译器,但也许我错了。我该如何解决这个问题?

【问题讨论】:

    标签: python heroku scikit-learn


    【解决方案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
    

    【讨论】:

    • 试试pip freeze
    【解决方案2】:

    另一个不错的选择是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。可用 conda 包的完整列表可以在 repo.continuum.io 找到。

    例如:

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

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

    【讨论】:

    • 不幸的是它可以工作,但是基本的 buildpack 太大而无法真正做很多事情......我什至无法安装 pandas,因为 conda 默认会打包 Qt 之类的东西(50 兆!)跨度>
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        基于这些指示,我刚刚在 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/

        【讨论】:

        【解决方案6】:

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

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

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

        【讨论】:

        • 我已经克隆了构建包。这就是我安装 scipy 和颠簸的方式。但是如何获得 scikit 的编译库?我必须编译它们吗?在什么类型的机器上?
        • 哦,我明白了!我的错。让我用更多细节编辑答案。
        猜你喜欢
        • 2013-05-29
        • 1970-01-01
        • 2017-08-30
        • 2015-06-28
        • 2020-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-20
        相关资源
        最近更新 更多