heroku - 在 Heroku 上运行 Scipy

标签 heroku numpy scipy blas

我在 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

最佳答案

通过将 numpy 和 scipy 离线构建为 bdists,然后修改 heroku python buildpack 以将它们直接解压缩到 dyno 的供应商/venv 区域,我设法在 cedar 堆栈上实现了这一点。您还可以使用 buildpack 设置持续存在的环境变量。

Heroku 尚未正式发布构建包 - 搜索“heroku 构建包”以获取更多第三方/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 安装 numpy/scipy 需要你有一个 fortran 编译器 + 相关的开发环境,这使得我的 slug 太大了。

它似乎有效,slug 大小现在是 35mb,并且扩展似乎也很快。除了 numpy 测试之一通过之外,所有 scipy 测试都通过了。

这对我来说仍在进行中,但我想我会分享。

关于heroku - 在 Heroku 上运行 Scipy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9819968/

相关文章:

python - 在谷歌域上为 heroku 应用程序强制使用 HTTPS

node.js - 当新代码推送到heroku时,faSTLy是否会自动清除?

python - 如何判断 NumPy 是创建 View 还是副本?

python - 我如何通过 numpy 从大数组中搜索数组

postgresql - 在 Heroku 上将 Postgres 与 Sails.js 结合使用时出错

javascript - Heroku ENV Vars 返回未定义但已定义

python - 查找 3 维 numpy 数组的唯一值的索引

python - numpy中Gauss-Legendre正交的不同间隔

python - 导入错误: No module named shutil_get_terminal_size

python - 从数组创建 mpf