Jos*_*ang 27 numpy heroku blas scipy
我让Numpy和Matplotlib在Heroku上运行,我也试图安装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
Run Code Online (Sandbox Code Playgroud)
在我的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.
Run Code Online (Sandbox Code Playgroud)
看来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
~ $
Run Code Online (Sandbox Code Playgroud)
看起来很好.现在我不知道如何解决这个问题.
[1] http://www.netlib.org/blas/ [2] http://www.scipy.org/Installing_SciPy/Linux
小智 15
我设法通过将numpy和scipy离线构建为bdists然后修改heroku python buildpack以将这些直接解压缩到dyno的vendor/venv区域来使这个工作在雪松堆栈上.您还可以使用buildpack来设置持久存在的环境变量.
Heroku还没有正式发布buildpacks - 搜索'heroku buildpacks'以获取更多第三方/ heroku的信息.
我的python构建包的分支在这里: https://wyn@github.com/wyn/heroku-buildpack-python.git
更改在bin/compile中,我在其中获取两个新步骤,一个scipy/numpy步骤和一个openopt步骤.这两个步骤的脚本位于bin/steps/npscipy和bin/steps/openopt中.我还在bin/release中添加了一些变量.请注意,我假设通过setup.py文件而不是requirements.txt方法进行安装(参见https://devcenter.heroku.com/articles/python-pip#traditional_distributions).
我还下载了用于在dyno上构建numpy/scipy的blas/lapack/atlas/gfortran二进制文件,因为有c扩展需要链接到它们.将所有内容构建为脱机和下载的原因是pip-installed numpy/scipy要求你有一个fortran编译器+相关的开发环境,这使得我的slug太大了.
它似乎工作,slug大小现在是35mb,缩放似乎也很快.除了一个numpy测试之外的所有测试都通过了,所有的scipy测试都通过了.
这对我来说还在进行中,但我想我会分享.
如果其他人像我一样来到这里......
@coshx对这个问题的出色答案遗憾地不再适用(至少我无法让它起作用).我做了什么,但是如下:
我从@coshx 分叉了npsicpy-binaries存储库并更改了所有tar文件,使得它们没有venv作为根文件夹(我的fork就在这里)
我从@coshx 分叉了npsp-helloworld存储库,并使用了一个requirements.txt文件而不是setup.py(我的fork在这里 - 这意味着你可以使用整个pip方法).
我从Heroku 分叉了heroku-buildpack-python存储库,从@coshx获取了npscipy文件并将其更改为使用这个最新版本的构建包(我的fork在这里 - 你可以看到没有设置venv,因为例).
完成这三件事后,我让npsp-helloworld应用程序完美运行.您只需要确保在创建应用程序时适当地设置buildpack并且您很高兴:
$ heroku create --stack=cedar --buildpack=https://github.com/kmp1/heroku-buildpack-python.git
Run Code Online (Sandbox Code Playgroud)
注意:我还没有弄清楚如何制作我自己的二进制文件,所以三个库(scipy,numpy和scikit-learn)不是最新版本所以请确保你安装它时(如果有人可以构建这些我很乐意接受他们的拉动请求):
pip install scipy==0.11.0
pip install numpy==1.7.0
pip install scikit-learn==0.13.1
Run Code Online (Sandbox Code Playgroud)
顺便说一句 - 如果我没有以正确的方式做事,礼仪明智,我真的很抱歉.我还在学习git和整个开源的东西.
另一个不错的选择是conda buildpack,它允许您将通过Anaconda/Miniconda提供的任何免费Linux64软件包添加到Heroku应用程序中.一些最受欢迎的软件包包括numpy,scipy,scikit-learn,statsmodels,pandas和cvxopt.虽然buildpack使得将包添加到应用程序变得相当简单,但缺点是buildback占用了大量空间,并且您必须等待Anaconda更新存储库中的库.
如果您在Heroku上启动新的Python应用程序,则可以使用以下命令添加conda buildpack:
$ heroku create YOUR_APP_NAME --buildpack https://github.com/kennethreitz/conda-buildpack.git
Run Code Online (Sandbox Code Playgroud)
如果您已经在Heroku上设置了Python应用程序,则可以使用以下命令将conda buildpack添加到现有应用程序:
$ heroku config:add BUILDPACK_URL=https://github.com/kennethreitz/conda-buildpack.git
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要按名称指定应用程序:
$ heroku config:add BUILDPACK_URL=https://github.com/kennethreitz/conda-buildpack.git --app YOUR_APP_NAME
Run Code Online (Sandbox Code Playgroud)
要使用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
Run Code Online (Sandbox Code Playgroud)
而已!您现在可以将Anaconda软件包添加到Heroku上的Python应用程序中.
slug 编译器不知道您的环境变量,这就是为什么它在推送期间失败,而不是在运行一次时失败。
您唯一真正的选择是查看user_env_compile当前处于实验室测试版的插件。
http://devcenter.heroku.com/articles/labs-user-env-compile
| 归档时间: |
|
| 查看次数: |
6541 次 |
| 最近记录: |