27

Heroku で Numpy と Matplotlib を実行し、Scipy もインストールしようとしています。ただし、Scipy をインストールするには BLAS[1] が必要ですが、これは Heroku プラットフォームにはありません。Heroku サポートに問い合わせたところ、BLAS を静的ライブラリとして構築してデプロイし、必要な環境変数をセットアップするよう提案されました。

そこで、64 ビット Linux ボックスで libblas.a をコンパイルし、[2] で説明されているように次の変数を設定しました。

$ heroku config
BLAS             => .heroku/vendor/lib/libfblas.a
LD_LIBRARY_PATH  => .heroku/vendor/lib
LIBRARY_PATH     => .heroku/vendor/lib
PATH             => bin:/usr/local/bin:/usr/bin:/bin
PYTHONUNBUFFERED => true

requirements.txt に scipy==0.10.1 を追加した後も、プッシュは失敗します。

     File "scipy/integrate/setup.py", line 10, in configuration

       blas_opt = get_info('blas_opt',notfound_action=2)

     File "/tmp/build_h5l5y31i49e8/lib/python2.7/site-packages/numpy/distutils/system_info.py", line 311, in get_info

       return cl().get_info(notfound_action)

     File "/tmp/build_h5l5y31i49e8/lib/python2.7/site-packages/numpy/distutils/system_info.py", line 462, in get_info

       raise self.notfounderror(self.notfounderror.__doc__)

   numpy.distutils.system_info.BlasNotFoundError:

       Blas (http://www.netlib.org/blas/) libraries not found.

       Directories to search for the libraries can be specified in the

       numpy/distutils/site.cfg file (section [blas]) or by setting

       the BLAS environment variable.

pip は BLAS 環境変数を認識していないようなので、heroku run python を使用して環境を確認します。

(venv)bash-3.2$ heroku run python
Running python attached to terminal... import up, run.1
Python 2.7.2 (default, Oct 31 2011, 16:22:04) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.system('bash')
~ $ echo $BLAS
.heroku/vendor/lib/libfblas.a
~ $ ls .heroku/vendor/lib/libfblas.a
.heroku/vendor/lib/libfblas.a
~ $ 

そして、それはうまくいくようです。今、私はこれを解決する方法がわかりません。

[1] http://www.netlib.org/blas/ [2] http://www.scipy.org/Installing_SciPy/Linux

4

6 に答える 6

15

numpyとscipyをbdistsとしてオフラインでビルドし、heroku pythonビルドパックを変更してdynoのベンダー/venvエリアに直接解凍することで、これを杉のスタックで機能させることができました。ビルドパックを使用して、永続する環境変数を設定することもできます。

Herokuはまだ正式にビルドパックを公開していません。サードパーティ/Herokuのビルドパックと情報については、「herokuビルドパック」を検索してください。

Pythonビルドパックの私のフォークはここにあります: https://wyn@github.com/wyn/heroku-buildpack-python.git

変更はbin/compileにあり、scipy/numpyステップとopenoptステップの2つの新しいステップをソースします。2つのステップのスクリプトは、bin / Steps/npscipyとbin/steps/openoptにあります。また、bin/releaseにいくつかの変数を追加しました。私はrequirements.txtアプローチではなくsetup.pyファイルを介してインストールすることを想定していることに注意してください(https://devcenter.heroku.com/articles/python-pip#traditional_distributionsを参照)。

また、numpy/scipyをdynoにビルドするために使用されたblas/lapack / atlas / gfortranバイナリをダウンロードします。これは、それらにリンクする必要のあるc拡張機能があるためです。すべてをオフラインでビルドしてダウンロードする理由は、pipをインストールするnumpy / scipyには、Fortranコンパイラーと関連する開発環境が必要であり、これが私のスラッグを大きくしすぎたためです。

それはうまくいくようです、スラッグサイズは現在35mbであり、スケーリングも速いようです。1つを除くすべてのnumpyテストに合格し、すべてのscipyテストに合格します。

これはまだ進行中ですが、共有したいと思いました。

于 2012-05-17T08:33:22.933 に答える
9

私のように他の誰かがこれに来た場合...

@coshxからのこの質問に対する優れた回答は、残念ながら機能しなくなりました (少なくとも私は機能しませんでした)。しかし、私がしたことは次のとおりです。

  1. @coshx からnpsicpy-binariesリポジトリをフォークし、すべての tar ファイルをvenv内部のルート フォルダーとして持たないように変更しました(私のフォークはhere です) 。

  2. @coshx からnpsp-helloworldリポジトリをフォークしrequirements.txt、setup.py の代わりにファイルを使用するようにしました (私のフォークはここにあります- これは、pip アプローチ全体を使用できることを意味します)。

  3. Heroku からheroku-buildpack-pythonリポジトリをフォークし、 @coshx からnpscipyファイルを取得して、この最新バージョンのビルド パックで動作するように変更しました (私のフォークはここにあります- venv が設定されていないことがわかります。例)。

これら 3 つのことを行った後、npsp-helloworldアプリケーションが完全に動作するようになりました。アプリケーションを作成するときにビルドパックが適切に設定されていることを確認する必要があるだけで、準備完了です。

$ heroku create --stack=cedar --buildpack=https://github.com/kmp1/heroku-buildpack-python.git

注: 独自のバイナリを作成する方法をまだ考えていないため、3 つのライブラリ (scipy、numpy、scikit-learn) は最新バージョンではないため、インストールするときに確認してください (これらをビルドできる人がいる場合は、私がそれらのプルリクエストを喜んで受け入れます):

pip install scipy==0.11.0
pip install numpy==1.7.0
pip install scikit-learn==0.13.1

ところで、エチケット的に正しい方法で物事を行っていない場合は、本当に申し訳ありません. 私はまだ git とこのオープン ソース全体について学んでいます。

于 2013-09-22T20:25:23.317 に答える
8

もう 1 つの適切なオプションはconda buildpack です。これを使用すると、Anaconda/Miniconda から入手できる無料の Linux64 パッケージを Heroku アプリに追加できます。最も人気のあるパッケージには、numpy、scipy、scikit-learn、statsmodels、pandas、cvxopt などがあります。ビルドパックを使用すると、アプリにパッケージを簡単に追加できますが、欠点は、ビルドバックが多くのスペースを占有し、アナコンダがリポジトリ内のライブラリを更新するのを待たなければならないことです。

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

ビルドパックを使用するには、アプリ ディレクトリに 2 つのテキスト ファイル、requirements.txt と conda-requirements.txt を含める必要があります。標準の Python ビルドパックと同様に、requirements.txt ファイルには、pip を使用してインストールする必要があるパッケージが一覧表示されます。conda を使用してインストールする必要があるパッケージは、conda-requirements.txt ファイルに一覧表示されています。最も有用な科学パッケージには、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 アプリに追加できるようになりました。

于 2015-01-27T03:02:00.340 に答える
3

slug コンパイラは環境変数を認識しないため、プッシュ中に失敗し、一度も実行されません。

唯一の実際のオプションは、user_env_compile現在ラボのベータ版にあるアドオンを確認することです.

http://devcenter.heroku.com/articles/labs-user-env-compile

于 2012-03-22T14:12:47.880 に答える
1

本番環境で Python 3.4 を使用したい人のために、Ubuntu 10.04 のバイナリとして numpy 1.8.1、scipy 0.14.0、および scikit-learn 0.15-git (何らかの理由で 0.14 は動作しません) をビルドしました。 Heroku cedar スタックで動作する LTS 64 ビット。ここに git リポジトリがあります。

私のherokuビルドパックは、kmpのものと非常に似ています。bin/steps/npscipy ファイルは、上記のバイナリのリポジトリにリンクしていることに注意してください。

于 2014-05-13T13:22:05.923 に答える
0

私のように誰かがこれにつまずいた場合に備えて、これをここに入れます。私はpython 3.4を使用しているので、初心者のビルドパックはうまくいきません。

conda buildpack を見ようとしましたが、scipy と numpy しか必要としない私のアプリケーションには少しやり過ぎのようです。最終的に私にとってうまくいくのは、マルチビルドパックアプローチを使用したこの優れたガイドです。ただし、scipy のインストールには確かに少し時間がかかりました。お役に立てれば!:)

于 2015-10-12T07:24:27.970 に答える