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