hashdist / hashstack

Collection of software profiles for HashDist
https://hashdist.github.io/
51 stars 60 forks source link

SciPy fails to build on RHEL6 #473

Closed certik closed 9 years ago

certik commented 10 years ago

Due to missing BLAS/LAPACK:

2014/10/14 15:43:34 - INFO: [package:run_job] running [u'/bin/bash', '_hashdist/build.sh']
2014/10/14 15:43:34 - INFO: [package:run_job] environment:
2014/10/14 15:43:34 - INFO: [package:run_job]   {'ARTIFACT': u'/local/certik/bld/scipy/zgwjbgnwh5zr',
2014/10/14 15:43:34 - INFO: [package:run_job]    'BASH': u'/bin/bash',
2014/10/14 15:43:34 - INFO: [package:run_job]    'BUILD': u'/local/certik/tmp/scipy-zgwjbgnwh5zr',
2014/10/14 15:43:34 - INFO: [package:run_job]    'HASHDIST_CPU_COUNT': '16',
2014/10/14 15:43:34 - INFO: [package:run_job]    'HDIST_CONFIG': '{"gc_roots":"/local/certik/gcroots","build_stores":[{"dir":"/local/certik/bld"}],"source_caches":[{"dir":"/local/certik/src"}],"cache":"/local/certik/cache","build_temp":"/local/certik/tmp"}',
2014/10/14 15:43:34 - INFO: [package:run_job]    'HDIST_IMPORT': u'numpy/2phb7dh5l436x3gbvye367xeq7t3sgnx patchelf/k3rloj265ogtl4dmmmbmyt34dnffryka python/x54axzlclsqvu7auoi42hmsiydpsrtay',
2014/10/14 15:43:34 - INFO: [package:run_job]    'HDIST_IMPORT_PATHS': u'/local/certik/bld/numpy/2phb7dh5l436:/local/certik/bld/patchelf/k3rloj265ogt:/local/certik/bld/python/x54axzlclsqv',
2014/10/14 15:43:34 - INFO: [package:run_job]    'HDIST_VIRTUALS': '',
2014/10/14 15:43:34 - INFO: [package:run_job]    u'NUMPY_DIR': u'/local/certik/bld/numpy/2phb7dh5l436',
2014/10/14 15:43:34 - INFO: [package:run_job]    u'NUMPY_ID': u'numpy/2phb7dh5l436x3gbvye367xeq7t3sgnx',
2014/10/14 15:43:34 - INFO: [package:run_job]    'PATCHELF': u'/local/certik/bld/patchelf/k3rloj265ogt/bin/patchelf',
2014/10/14 15:43:34 - INFO: [package:run_job]    u'PATCHELF_DIR': u'/local/certik/bld/patchelf/k3rloj265ogt',
2014/10/14 15:43:34 - INFO: [package:run_job]    u'PATCHELF_ID': u'patchelf/k3rloj265ogtl4dmmmbmyt34dnffryka',
2014/10/14 15:43:34 - INFO: [package:run_job]    'PATH': u'/local/certik/bld/python/x54axzlclsqv/bin:/usr/bin:/bin',
2014/10/14 15:43:34 - INFO: [package:run_job]    'PKG_CONFIG_PATH': u'/local/certik/bld/python/x54axzlclsqv/lib/pkgconfig',
2014/10/14 15:43:34 - INFO: [package:run_job]    'PWD': u'/local/certik/tmp/scipy-zgwjbgnwh5zr',
2014/10/14 15:43:34 - INFO: [package:run_job]    'PYTHON': u'/local/certik/bld/python/x54axzlclsqv/bin/python',
2014/10/14 15:43:34 - INFO: [package:run_job]    'PYTHONPATH': u'/local/certik/bld/numpy/2phb7dh5l436/lib/python2.7/site-packages',
2014/10/14 15:43:34 - INFO: [package:run_job]    u'PYTHON_DIR': u'/local/certik/bld/python/x54axzlclsqv',
2014/10/14 15:43:34 - INFO: [package:run_job]    u'PYTHON_ID': u'python/x54axzlclsqvu7auoi42hmsiydpsrtay'}
2014/10/14 15:43:35 - INFO: [package:run_job] /local/certik/bld/python/x54axzlclsqv/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'test_suite'
2014/10/14 15:43:35 - INFO: [package:run_job]   warnings.warn(msg)
2014/10/14 15:43:35 - INFO: [package:run_job] blas_opt_info:
2014/10/14 15:43:35 - INFO: [package:run_job] blas_mkl_info:
2014/10/14 15:43:35 - INFO: [package:run_job]   libraries mkl,vml,guide not found in ['/local/certik/bld/python/x54axzlclsqv/lib', '/usr/local/lib64', '/usr/local/lib', '/usr/lib64', '/usr/lib']
2014/10/14 15:43:35 - INFO: [package:run_job]   NOT AVAILABLE
2014/10/14 15:43:35 - INFO: [package:run_job] 
2014/10/14 15:43:35 - INFO: [package:run_job] atlas_blas_threads_info:
2014/10/14 15:43:35 - INFO: [package:run_job] Setting PTATLAS=ATLAS
2014/10/14 15:43:35 - INFO: [package:run_job]   libraries openblas not found in ['/lib']
2014/10/14 15:43:35 - INFO: [package:run_job]   NOT AVAILABLE
2014/10/14 15:43:35 - INFO: [package:run_job] 
2014/10/14 15:43:35 - INFO: [package:run_job] atlas_blas_info:
2014/10/14 15:43:35 - INFO: [package:run_job]   libraries openblas not found in ['/lib']
2014/10/14 15:43:35 - INFO: [package:run_job]   NOT AVAILABLE
2014/10/14 15:43:35 - INFO: [package:run_job] 
2014/10/14 15:43:35 - INFO: [package:run_job] /local/certik/bld/numpy/2phb7dh5l436/lib/python2.7/site-packages/numpy/distutils/system_info.py:1494: UserWarning: 
2014/10/14 15:43:35 - INFO: [package:run_job]     Atlas (http://math-atlas.sourceforge.net/) libraries not found.
2014/10/14 15:43:35 - INFO: [package:run_job]     Directories to search for the libraries can be specified in the
2014/10/14 15:43:35 - INFO: [package:run_job]     numpy/distutils/site.cfg file (section [atlas]) or by setting
2014/10/14 15:43:35 - INFO: [package:run_job]     the ATLAS environment variable.
2014/10/14 15:43:35 - INFO: [package:run_job]   warnings.warn(AtlasNotFoundError.__doc__)
2014/10/14 15:43:35 - INFO: [package:run_job] blas_info:
2014/10/14 15:43:35 - INFO: [package:run_job]   libraries blas not found in ['/local/certik/bld/python/x54axzlclsqv/lib', '/usr/local/lib64', '/usr/local/lib', '/usr/lib64', '/usr/lib']
2014/10/14 15:43:35 - INFO: [package:run_job]   NOT AVAILABLE
2014/10/14 15:43:35 - INFO: [package:run_job] /local/certik/bld/numpy/2phb7dh5l436/lib/python2.7/site-packages/numpy/distutils/system_info.py:1503: UserWarning: 
2014/10/14 15:43:35 - INFO: [package:run_job]     Blas (http://www.netlib.org/blas/) libraries not found.
2014/10/14 15:43:35 - INFO: [package:run_job]     Directories to search for the libraries can be specified in the
2014/10/14 15:43:35 - INFO: [package:run_job]     numpy/distutils/site.cfg file (section [blas]) or by setting
2014/10/14 15:43:35 - INFO: [package:run_job]     the BLAS environment variable.
2014/10/14 15:43:35 - INFO: [package:run_job]   warnings.warn(BlasNotFoundError.__doc__)
2014/10/14 15:43:35 - INFO: [package:run_job] 
2014/10/14 15:43:35 - INFO: [package:run_job] blas_src_info:
2014/10/14 15:43:35 - INFO: [package:run_job]   NOT AVAILABLE
2014/10/14 15:43:35 - INFO: [package:run_job] 
2014/10/14 15:43:35 - INFO: [package:run_job] /local/certik/bld/numpy/2phb7dh5l436/lib/python2.7/site-packages/numpy/distutils/system_info.py:1506: UserWarning: 
2014/10/14 15:43:35 - INFO: [package:run_job]     Blas (http://www.netlib.org/blas/) sources not found.
2014/10/14 15:43:35 - INFO: [package:run_job]     Directories to search for the sources can be specified in the
2014/10/14 15:43:35 - INFO: [package:run_job]     numpy/distutils/site.cfg file (section [blas_src]) or by setting
2014/10/14 15:43:35 - INFO: [package:run_job]     the BLAS_SRC environment variable.
2014/10/14 15:43:35 - INFO: [package:run_job]   warnings.warn(BlasSrcNotFoundError.__doc__)
2014/10/14 15:43:35 - INFO: [package:run_job] Traceback (most recent call last):
2014/10/14 15:43:35 - INFO: [package:run_job]   File "setup.py", line 230, in <module>
2014/10/14 15:43:35 - INFO: [package:run_job]     setup_package()
2014/10/14 15:43:35 - INFO: [package:run_job]   File "setup.py", line 227, in setup_package
2014/10/14 15:43:35 - INFO: [package:run_job]     setup(**metadata)
2014/10/14 15:43:35 - INFO: [package:run_job]   File "/local/certik/bld/numpy/2phb7dh5l436/lib/python2.7/site-packages/numpy/distutils/core.py", line 152, in setup
2014/10/14 15:43:35 - INFO: [package:run_job]     config = configuration()
2014/10/14 15:43:35 - INFO: [package:run_job]   File "setup.py", line 170, in configuration
2014/10/14 15:43:35 - INFO: [package:run_job]     config.add_subpackage('scipy')
2014/10/14 15:43:35 - INFO: [package:run_job]   File "/local/certik/bld/numpy/2phb7dh5l436/lib/python2.7/site-packages/numpy/distutils/misc_util.py", line 1003, in add_subpackage
2014/10/14 15:43:35 - INFO: [package:run_job]     caller_level = 2)
2014/10/14 15:43:35 - INFO: [package:run_job]   File "/local/certik/bld/numpy/2phb7dh5l436/lib/python2.7/site-packages/numpy/distutils/misc_util.py", line 972, in get_subpackage
2014/10/14 15:43:35 - INFO: [package:run_job]     caller_level = caller_level + 1)
2014/10/14 15:43:35 - INFO: [package:run_job]   File "/local/certik/bld/numpy/2phb7dh5l436/lib/python2.7/site-packages/numpy/distutils/misc_util.py", line 909, in _get_configuration_from_setup_py
2014/10/14 15:43:35 - INFO: [package:run_job]     config = setup_module.configuration(*args)
2014/10/14 15:43:35 - INFO: [package:run_job]   File "scipy/setup.py", line 12, in configuration
2014/10/14 15:43:35 - INFO: [package:run_job]     config.add_subpackage('integrate')
2014/10/14 15:43:35 - INFO: [package:run_job]   File "/local/certik/bld/numpy/2phb7dh5l436/lib/python2.7/site-packages/numpy/distutils/misc_util.py", line 1003, in add_subpackage
2014/10/14 15:43:35 - INFO: [package:run_job]     caller_level = 2)
2014/10/14 15:43:35 - INFO: [package:run_job]   File "/local/certik/bld/numpy/2phb7dh5l436/lib/python2.7/site-packages/numpy/distutils/misc_util.py", line 972, in get_subpackage
2014/10/14 15:43:35 - INFO: [package:run_job]     caller_level = caller_level + 1)
2014/10/14 15:43:35 - INFO: [package:run_job]   File "/local/certik/bld/numpy/2phb7dh5l436/lib/python2.7/site-packages/numpy/distutils/misc_util.py", line 909, in _get_configuration_from_setup_py
2014/10/14 15:43:35 - INFO: [package:run_job]     config = setup_module.configuration(*args)
2014/10/14 15:43:35 - INFO: [package:run_job]   File "scipy/integrate/setup.py", line 12, in configuration
2014/10/14 15:43:35 - INFO: [package:run_job]     blas_opt = get_info('blas_opt',notfound_action=2)
2014/10/14 15:43:35 - INFO: [package:run_job]   File "/local/certik/bld/numpy/2phb7dh5l436/lib/python2.7/site-packages/numpy/distutils/system_info.py", line 338, in get_info
2014/10/14 15:43:35 - INFO: [package:run_job]     return cl().get_info(notfound_action)
2014/10/14 15:43:35 - INFO: [package:run_job]   File "/local/certik/bld/numpy/2phb7dh5l436/lib/python2.7/site-packages/numpy/distutils/system_info.py", line 497, in get_info
2014/10/14 15:43:35 - INFO: [package:run_job]     raise self.notfounderror(self.notfounderror.__doc__)
2014/10/14 15:43:35 - INFO: [package:run_job] numpy.distutils.system_info.BlasNotFoundError: 
2014/10/14 15:43:35 - INFO: [package:run_job]     Blas (http://www.netlib.org/blas/) libraries not found.
2014/10/14 15:43:35 - INFO: [package:run_job]     Directories to search for the libraries can be specified in the
2014/10/14 15:43:35 - INFO: [package:run_job]     numpy/distutils/site.cfg file (section [blas]) or by setting
2014/10/14 15:43:35 - INFO: [package:run_job]     the BLAS environment variable.
2014/10/14 15:43:35 - ERROR: [package:run_job] Command '[u'/bin/bash', '_hashdist/build.sh']' returned non-zero exit status 1
2014/10/14 15:43:35 - ERROR: [package:run_job] command failed (code=1); raising

The following patch fixes it on my machine:

diff --git a/pkgs/scipy.yaml b/pkgs/scipy.yaml
index aa8f62f..1701639 100644
--- a/pkgs/scipy.yaml
+++ b/pkgs/scipy.yaml
@@ -1,8 +1,21 @@
 extends: [distutils_package]
 dependencies:
-  build: [numpy]
-  run: [numpy]
+  build: [lapack, numpy]
+  run: [lapack, numpy]

 sources:
   - url: http://downloads.sourceforge.net/scipy/scipy-0.13.3.tar.gz
     key: tar.gz:vhrty7xamdbvzvog5y5mtzpjxo4zegox
+
+build_stages:
+  - when: platform == 'linux'
+    name: create-site.cfg
+    before: install
+    handler: bash
+    bash: |
+      cat > site.cfg << EOF
+      [DEFAULT]
+      libraries = lapack,blas
+      library_dirs = ${LAPACK_DIR}/lib
+      include_dirs = ${LAPACK_DIR}/include
+      EOF

@ahmadia any ideas how to make this work for any BLAS / LAPACK that the user configures using things like:

  blas:
    use: lapack

?

certik commented 10 years ago

But when importing, it fails with:

In [1]: from scipy import linalg
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-23128485f750> in <module>()
----> 1 from scipy import linalg

/local/certik/bld/profile/ckcybplill5a/lib/python2.7/site-packages/scipy/linalg/__init__.py in <module>()
    155 from .linalg_version import linalg_version as __version__
    156 
--> 157 from .misc import *
    158 from .basic import *
    159 from .decomp import *

/local/certik/bld/profile/ckcybplill5a/lib/python2.7/site-packages/scipy/linalg/misc.py in <module>()
      3 import numpy as np
      4 from numpy.linalg import LinAlgError
----> 5 from . import blas
      6 
      7 __all__ = ['LinAlgError', 'norm']

/local/certik/bld/profile/ckcybplill5a/lib/python2.7/site-packages/scipy/linalg/blas.py in <module>()
    129 import numpy as _np
    130 
--> 131 from scipy.linalg import _fblas
    132 try:
    133     from scipy.linalg import _cblas

ImportError: liblapack.so: cannot open shared object file: No such file or directory

So here is a better patch that seems to fix all problems:

diff --git a/pkgs/scipy.yaml b/pkgs/scipy.yaml
index aa8f62f..be1ce4d 100644
--- a/pkgs/scipy.yaml
+++ b/pkgs/scipy.yaml
@@ -1,8 +1,20 @@
-extends: [distutils_package]
+extends: [distutils_package, libflags]
 dependencies:
-  build: [numpy]
-  run: [numpy]
+  build: [lapack, numpy]
+  run: [lapack, numpy]

 sources:
   - url: http://downloads.sourceforge.net/scipy/scipy-0.13.3.tar.gz
     key: tar.gz:vhrty7xamdbvzvog5y5mtzpjxo4zegox
+
+build_stages:
+  - when: platform == 'linux'
+    name: set-lapack-paths
+    after: libflags
+    before: install
+    handler: bash
+    bash: |
+      export LDFLAGS="$LDFLAGS -shared"
+      export ATLAS=$LAPACK_DIR
+      export BLAS=$LAPACK_DIR
+      export LAPACK=$LAPACK_DIR

Now it works:

In [1]: from scipy import linalg

In [2]: 
ahmadia commented 10 years ago

I'm in the middle of a meeting but as a quick reaction, yes, we want to add explicit dependencies to blas/lapack and this is the right way to do it.

certik commented 10 years ago

@ahmadia no rush, it works on my computer so it's just a matter of figuring out how to fix it for everybody. I thought we don't want to explicitly depend on lapack or openblas but rather on blas and allow the user to configure blas in his profile and then packages like scipy would work with whatever the user provides.

So I think a better way is to export some general variables in the blas package, use those in scipy and then let the user set those in his or her profile.

/cc @cekees

ahmadia commented 10 years ago

I see what you mean, but aren't you explicitly depending on lapack here?

certik commented 10 years ago

In my patch I am explicitly depending on lapack. But I think we shouldn't be.