Skip to content
Snippets Groups Projects
Commit c0aaa8fc authored by Adam J. Stewart's avatar Adam J. Stewart Committed by Todd Gamblin
Browse files

Add PythonPackage base class

- Add a PythonPackage class with build system support.
  - Support build phases in PythonPackage
  - Add a custom sanity check for PythonPackages
  - Get rid of nolink dependencies in python packages

- Update spack create to use new PythonPackage class

- Port most of Python packages to new PythonPackage class

- Conducted a massive install and activate of Python packages.
  - Fixed bugs introduced by install and activate.

- Update API docs on PythonPackage
parent 1f49493f
No related branches found
No related tags found
No related merge requests found
Showing
with 42 additions and 125 deletions
......@@ -25,15 +25,11 @@
from spack import *
class PyBottleneck(Package):
class PyBottleneck(PythonPackage):
"""A collection of fast NumPy array functions written in Cython."""
homepage = "https://pypi.python.org/pypi/Bottleneck/1.0.0"
url = "https://pypi.python.org/packages/source/B/Bottleneck/Bottleneck-1.0.0.tar.gz"
version('1.0.0', '380fa6f275bd24f27e7cf0e0d752f5d2')
extends('python')
depends_on('py-numpy', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)
......@@ -25,18 +25,13 @@
from spack import *
class PyCclib(Package):
class PyCclib(PythonPackage):
"""Open source library for parsing and interpreting the results of
computational chemistry packages"""
homepage = "https://cclib.github.io/"
url = "https://github.com/cclib/cclib/releases/download/v1.5/cclib-1.5.tar.gz"
version('1.5', 'c06940101c4796bce82036b13fecb73c')
extends('python')
version('1.5.post1', '1a50be48e4597b1a6dabe943da82a43c',
url="https://github.com/cclib/cclib/releases/download/v1.5/cclib-1.5.post1.tar.gz")
depends_on('py-numpy@1.5:', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))
......@@ -25,7 +25,7 @@
from spack import *
class PyCdo(Package):
class PyCdo(PythonPackage):
"""The cdo package provides an interface to the Climate Data
Operators from Python."""
......@@ -35,13 +35,8 @@ class PyCdo(Package):
version('1.3.2', '4b3686ec1b9b891f166c1c466c6db745',
url="https://pypi.python.org/packages/d6/13/908e7c1451e1f5fb68405f341cdcb3196a16952ebfe1f172cb788f864aa9/cdo-1.3.2.tar.gz")
extends('python')
depends_on('cdo')
depends_on('py-setuptools', type='build')
depends_on('py-scipy', type=('build', 'run'))
depends_on('py-netcdf', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))
......@@ -25,18 +25,13 @@
from spack import *
class PyCertifi(Package):
class PyCertifi(PythonPackage):
"""Certifi: A carefully curated collection of Root Certificates for validating
the trustworthiness of SSL certificates while verifying the identity of TLS
hosts."""
homepage = "https://github.com/certifi/python-certifi"
# base https://pypi.python.org/pypi/certifi/
url = "https://github.com/certifi/python-certifi/archive/2016.02.28.tar.gz"
version('2016.02.28', '5ccfc23bd5e931863f0b01ef3e9d2dbd3bef0e1b')
extends('python')
depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))
......@@ -22,12 +22,10 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
import os
from spack import *
class PyCffi(Package):
class PyCffi(PythonPackage):
"""Foreign Function Interface for Python calling C code"""
homepage = "http://cffi.readthedocs.org/en/latest/"
# base https://pypi.python.org/pypi/cffi
......@@ -35,18 +33,15 @@ class PyCffi(Package):
version('1.1.2', 'ca6e6c45b45caa87aee9adc7c796eaea')
extends('python')
depends_on('py-setuptools', type='build')
depends_on('py-pycparser', type=('build', 'run'))
depends_on('libffi')
def install(self, spec, prefix):
def setup_environment(self, spack_env, run_env):
# This sets the compiler (and flags) that distutils will use
# to create the final shared library. It will use the
# compiler specified by the environment variable 'CC' for all
# other compilation. We are setting the 'LDSHARED" to the
# spack compiler wrapper plus a few extra flags necessary for
# building the shared library.
os.environ['LDSHARED'] = "{0} -shared -pthread".format(spack_cc)
setup_py('install', '--prefix=%s' % prefix)
spack_env.set('LDSHARED', "{0} -shared -pthread".format(spack_cc))
......@@ -25,7 +25,7 @@
from spack import *
class PyConfigparser(Package):
class PyConfigparser(PythonPackage):
"""This library brings the updated configparser from Python 3.5 to
Python 2.6-3.5."""
......@@ -35,12 +35,10 @@ class PyConfigparser(Package):
version('3.5.0', 'cfdd915a5b7a6c09917a64a573140538',
url="https://pypi.python.org/packages/7c/69/c2ce7e91c89dc073eb1aa74c0621c3eefbffe8216b3f9af9d3885265c01c/configparser-3.5.0.tar.gz")
extends('python')
depends_on('python@2.6:2.7,3.4:')
depends_on('py-ordereddict', when='^python@2.6:2.6.999', type=('build', 'run'))
# This dependency breaks concretization
# See https://github.com/LLNL/spack/issues/2793
# depends_on('py-ordereddict', when='^python@2.6:2.6.999', type=('build', 'run')) # noqa
depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))
......@@ -25,7 +25,7 @@
from spack import *
class PyCoverage(Package):
class PyCoverage(PythonPackage):
""" Testing coverage checker for python """
homepage = "http://nedbatchelder.com/code/coverage/"
......@@ -34,8 +34,3 @@ class PyCoverage(Package):
version('4.0a6', '1bb4058062646148965bef0796b61efc')
depends_on('py-setuptools', type='build')
extends('python')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)
......@@ -25,7 +25,7 @@
from spack import *
class PyCsvkit(Package):
class PyCsvkit(PythonPackage):
"""A library of utilities for working with CSV, the king of tabular file
formats"""
......@@ -34,14 +34,9 @@ class PyCsvkit(Package):
version('0.9.1', '48d78920019d18846933ee969502fff6')
extends('python')
depends_on('py-dateutil', type=('build', 'run'))
depends_on('py-dbf', type=('build', 'run'))
depends_on('py-xlrd', type=('build', 'run'))
depends_on('py-sqlalchemy', type=('build', 'run'))
depends_on('py-six', type=('build', 'run'))
depends_on('py-openpyxl', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)
......@@ -25,7 +25,7 @@
from spack import *
class PyCycler(Package):
class PyCycler(PythonPackage):
"""Composable style cycles."""
homepage = "http://matplotlib.org/cycler/"
......@@ -33,10 +33,5 @@ class PyCycler(Package):
version('0.10.0', '83dd0df7810e838b59e4dd9fa6e2d198')
extends('python')
depends_on('py-setuptools', type='build')
depends_on('py-six', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))
......@@ -25,7 +25,7 @@
from spack import *
class PyCython(Package):
class PyCython(PythonPackage):
"""The Cython compiler for writing C extensions for the Python language."""
homepage = "https://pypi.python.org/pypi/cython"
url = "https://pypi.io/packages/source/c/cython/Cython-0.25.2.tar.gz"
......@@ -38,8 +38,3 @@ class PyCython(Package):
# These versions contain illegal Python3 code...
version('0.22', '1ae25add4ef7b63ee9b4af697300d6b6')
version('0.21.2', 'd21adb870c75680dc857cd05d41046a4')
extends('python')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)
......@@ -25,16 +25,11 @@
from spack import *
class PyDask(Package):
class PyDask(PythonPackage):
"""Minimal task scheduling abstraction"""
homepage = "https://github.com/dask/dask/"
url = "https://pypi.python.org/packages/source/d/dask/dask-0.8.1.tar.gz"
version('0.8.1', '5dd8e3a3823b3bc62c9a6d192e2cb5b4')
extends('python')
depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)
......@@ -25,7 +25,7 @@
from spack import *
class PyDateutil(Package):
class PyDateutil(PythonPackage):
"""Extensions to the standard Python datetime module."""
homepage = "https://pypi.python.org/pypi/dateutil"
url = "https://pypi.python.org/packages/source/p/python-dateutil/python-dateutil-2.4.0.tar.gz"
......@@ -34,9 +34,5 @@ class PyDateutil(Package):
version('2.4.2', '4ef68e1c485b09e9f034e10473e5add2')
version('2.5.2', 'eafe168e8f404bf384514f5116eedbb6')
extends('python')
depends_on('py-setuptools', type='build')
depends_on('py-six', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)
......@@ -25,7 +25,7 @@
from spack import *
class PyDbf(Package):
class PyDbf(PythonPackage):
"""Pure python package for reading/writing dBase, FoxPro, and Visual FoxPro
.dbf files (including memos)"""
......@@ -33,8 +33,3 @@ class PyDbf(Package):
url = "https://pypi.python.org/packages/source/d/dbf/dbf-0.96.005.tar.gz"
version('0.96.005', 'bce1a1ed8b454a30606e7e18dd2f8277')
extends('python')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)
......@@ -25,7 +25,7 @@
from spack import *
class PyDecorator(Package):
class PyDecorator(PythonPackage):
"""The aim of the decorator module it to simplify the usage of decorators
for the average programmer, and to popularize decorators by showing
various non-trivial examples."""
......@@ -34,9 +34,4 @@ class PyDecorator(Package):
version('4.0.9', 'f12c5651ccd707e12a0abaa4f76cd69a')
extends('python')
depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)
......@@ -25,7 +25,7 @@
from spack import *
class PyDocutils(Package):
class PyDocutils(PythonPackage):
"""Docutils is an open-source text processing system for processing
plaintext documentation into useful formats, such as HTML, LaTeX,
man-pages, open-document or XML. It includes reStructuredText, the
......@@ -35,9 +35,6 @@ class PyDocutils(Package):
homepage = "http://docutils.sourceforge.net/"
url = "https://pypi.python.org/packages/source/d/docutils/docutils-0.12.tar.gz"
version('0.13.1', 'ea4a893c633c788be9b8078b6b305d53',
url="https://pypi.python.org/packages/05/25/7b5484aca5d46915493f1fd4ecb63c38c333bd32aa9ad6e19da8d08895ae/docutils-0.13.1.tar.gz")
version('0.12', '4622263b62c5c771c03502afa3157768')
extends('python')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))
......@@ -25,7 +25,7 @@
from spack import *
class PyEmcee(Package):
class PyEmcee(PythonPackage):
"""emcee is an MIT licensed pure-Python implementation of Goodman & Weare's
Affine Invariant Markov chain Monte Carlo (MCMC) Ensemble sampler."""
......@@ -34,8 +34,4 @@ class PyEmcee(Package):
version('2.1.0', 'c6b6fad05c824d40671d4a4fc58dfff7')
extends('python')
depends_on('py-numpy', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))
......@@ -25,7 +25,7 @@
from spack import *
class PyEnum34(Package):
class PyEnum34(PythonPackage):
"""Python 3.4 Enum backported to 3.3, 3.2, 3.1, 2.7, 2.6, 2.5, and 2.4."""
homepage = "https://pypi.python.org/pypi/enum34"
......@@ -34,12 +34,10 @@ class PyEnum34(Package):
version('1.1.6', '5f13a0841a61f7fc295c514490d120d0',
url="https://pypi.python.org/packages/bf/3e/31d502c25302814a7c2f1d3959d2a3b3f78e509002ba91aea64993936876/enum34-1.1.6.tar.gz")
extends('python')
depends_on('python@2.4:2.8,3.3:')
depends_on('py-ordereddict', when='^python@:2.6.999', type=('build', 'run'))
# This dependency breaks concretization
# See https://github.com/LLNL/spack/issues/2793
# depends_on('py-ordereddict', when='^python@:2.6.999', type=('build', 'run')) # noqa
depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))
......@@ -25,15 +25,10 @@
from spack import *
class PyEpydoc(Package):
class PyEpydoc(PythonPackage):
"""Epydoc is a tool for generating API documentation documentation for
Python modules, based on their docstrings."""
homepage = "https://pypi.python.org/pypi/epydoc"
url = "https://pypi.python.org/packages/source/e/epydoc/epydoc-3.0.1.tar.gz"
version('3.0.1', '36407974bd5da2af00bf90ca27feeb44')
extends('python')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)
......@@ -25,7 +25,7 @@
from spack import *
class PyFlake8(Package):
class PyFlake8(PythonPackage):
"""Flake8 is a wrapper around PyFlakes, pep8 and Ned Batchelder's
McCabe script."""
......@@ -43,7 +43,7 @@ class PyFlake8(Package):
depends_on('py-setuptools', type=('build', 'run'))
# pyflakes >= 0.8.1, != 1.2.0, != 1.2.1, != 1.2.2, < 1.3.0
depends_on('py-pyflakes@0.8.1:1.1.0,1.2.3:1.2.3', when='@3.0.4', type=('build', 'run')) # noqa
depends_on('py-pyflakes@0.8.1:1.1.0,1.2.3:1.2.3', when='@3.0.4', type=('build', 'run'))
# pyflakes >= 0.8.1, < 1.1
depends_on('py-pyflakes@0.8.1:1.0.0', when='@2.5.4', type=('build', 'run'))
......@@ -57,11 +57,12 @@ class PyFlake8(Package):
# mccabe >= 0.2.1, < 0.5
depends_on('py-mccabe@0.2.1:0.4.0', when='@2.5.4', type=('build', 'run'))
depends_on('py-configparser', when='^python@:3.3.999', type=('build', 'run'))
depends_on('py-enum34', when='^python@:3.1.999', type=('build', 'run'))
# These dependencies breaks concretization
# See https://github.com/LLNL/spack/issues/2793
# depends_on('py-configparser', when='^python@:3.3.999', type=('build', 'run')) # noqa
# depends_on('py-enum34', when='^python@:3.1.999', type=('build', 'run'))
depends_on('py-configparser', type=('build', 'run'))
depends_on('py-enum34', type=('build', 'run'))
# TODO: Add test dependencies
# depends_on('py-nose', type='test')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))
......@@ -25,16 +25,11 @@
from spack import *
class PyFuncsigs(Package):
class PyFuncsigs(PythonPackage):
"""Python function signatures from PEP362 for Python 2.6, 2.7 and 3.2."""
homepage = "https://pypi.python.org/pypi/funcsigs"
url = "https://pypi.python.org/packages/source/f/funcsigs/funcsigs-0.4.tar.gz"
version('0.4', 'fb1d031f284233e09701f6db1281c2a5')
extends('python')
depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment