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
This commit is contained in:
Adam J. Stewart 2017-01-16 18:13:37 -08:00 committed by Todd Gamblin
parent 1f49493fee
commit c0aaa8fcea
169 changed files with 849 additions and 1011 deletions

View File

@ -159,9 +159,10 @@
from spack.build_systems.makefile import MakefilePackage from spack.build_systems.makefile import MakefilePackage
from spack.build_systems.autotools import AutotoolsPackage from spack.build_systems.autotools import AutotoolsPackage
from spack.build_systems.cmake import CMakePackage from spack.build_systems.cmake import CMakePackage
from spack.build_systems.python import PythonPackage
from spack.build_systems.r import RPackage from spack.build_systems.r import RPackage
__all__ += ['Package', 'CMakePackage', 'AutotoolsPackage', 'MakefilePackage', __all__ += ['Package', 'CMakePackage', 'AutotoolsPackage', 'MakefilePackage',
'RPackage'] 'PythonPackage', 'RPackage']
from spack.version import Version, ver from spack.version import Version, ver
__all__ += ['Version', 'ver'] __all__ += ['Version', 'ver']

View File

@ -0,0 +1,309 @@
##############################################################################
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License (as
# published by the Free Software Foundation) version 2.1, February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# 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 inspect
from spack.directives import extends
from spack.package import PackageBase
from llnl.util.filesystem import working_dir
class PythonPackage(PackageBase):
"""Specialized class for packages that are built using Python
setup.py files
This class provides the following phases that can be overridden:
* build
* build_py
* build_ext
* build_clib
* build_scripts
* clean
* install
* install_lib
* install_headers
* install_scripts
* install_data
* sdist
* register
* bdist
* bdist_dumb
* bdist_rpm
* bdist_wininst
* upload
* check
These are all standard setup.py commands and can be found by running:
.. code-block:: console
$ python setup.py --help-commands
By default, only the 'build' and 'install' phases are run, but if you
need to run more phases, simply modify your ``phases`` list like so:
.. code-block:: python
phases = ['build_ext', 'install', 'bdist']
Each phase provides a function <phase> that runs:
.. code-block:: console
$ python --no-user-cfg setup.py <phase>
Each phase also has a <phase_args> function that can pass arguments to
this call. All of these functions are empty except for the ``install_args``
function, which passes ``--prefix=/path/to/installation/directory``.
If you need to run a phase which is not a standard setup.py command,
you'll need to define a function for it like so:
.. code-block:: python
def configure(self, spec, prefix):
self.setup_py('configure')
"""
# Default phases
phases = ['build', 'install']
# To be used in UI queries that require to know which
# build-system class we are using
build_system_class = 'PythonPackage'
extends('python')
def setup_file(self, spec, prefix):
"""Returns the name of the setup file to use."""
return 'setup.py'
def build_directory(self):
"""The directory containing the ``setup.py`` file."""
return self.stage.source_path
def python(self, *args):
inspect.getmodule(self).python(*args)
def setup_py(self, *args):
setup = self.setup_file(self.spec, self.prefix)
with working_dir(self.build_directory()):
self.python(setup, '--no-user-cfg', *args)
# The following phases and their descriptions come from:
# $ python setup.py --help-commands
# Only standard commands are included here, but some packages
# define extra commands as well
def build(self, spec, prefix):
"""Build everything needed to install."""
args = self.build_args(spec, prefix)
self.setup_py('build', *args)
def build_args(self, spec, prefix):
"""Arguments to pass to build."""
return []
def build_py(self, spec, prefix):
'''"Build" pure Python modules (copy to build directory).'''
args = self.build_py_args(spec, prefix)
self.setup_py('build_py', *args)
def build_py_args(self, spec, prefix):
"""Arguments to pass to build_py."""
return []
def build_ext(self, spec, prefix):
"""Build C/C++ extensions (compile/link to build directory)."""
args = self.build_ext_args(spec, prefix)
self.setup_py('build_ext', *args)
def build_ext_args(self, spec, prefix):
"""Arguments to pass to build_ext."""
return []
def build_clib(self, spec, prefix):
"""Build C/C++ libraries used by Python extensions."""
args = self.build_clib_args(spec, prefix)
self.setup_py('build_clib', *args)
def build_clib_args(self, spec, prefix):
"""Arguments to pass to build_clib."""
return []
def build_scripts(self, spec, prefix):
'''"Build" scripts (copy and fixup #! line).'''
args = self.build_scripts_args(spec, prefix)
self.setup_py('build_scripts', *args)
def clean(self, spec, prefix):
"""Clean up temporary files from 'build' command."""
args = self.clean_args(spec, prefix)
self.setup_py('clean', *args)
def clean_args(self, spec, prefix):
"""Arguments to pass to clean."""
return []
def install(self, spec, prefix):
"""Install everything from build directory."""
args = self.install_args(spec, prefix)
self.setup_py('install', *args)
def install_args(self, spec, prefix):
"""Arguments to pass to install."""
return ['--prefix={0}'.format(prefix)]
def install_lib(self, spec, prefix):
"""Install all Python modules (extensions and pure Python)."""
args = self.install_lib_args(spec, prefix)
self.setup_py('install_lib', *args)
def install_lib_args(self, spec, prefix):
"""Arguments to pass to install_lib."""
return []
def install_headers(self, spec, prefix):
"""Install C/C++ header files."""
args = self.install_headers_args(spec, prefix)
self.setup_py('install_headers', *args)
def install_headers_args(self, spec, prefix):
"""Arguments to pass to install_headers."""
return []
def install_scripts(self, spec, prefix):
"""Install scripts (Python or otherwise)."""
args = self.install_scripts_args(spec, prefix)
self.setup_py('install_scripts', *args)
def install_scripts_args(self, spec, prefix):
"""Arguments to pass to install_scripts."""
return []
def install_data(self, spec, prefix):
"""Install data files."""
args = self.install_data_args(spec, prefix)
self.setup_py('install_data', *args)
def install_data_args(self, spec, prefix):
"""Arguments to pass to install_data."""
return []
def sdist(self, spec, prefix):
"""Create a source distribution (tarball, zip file, etc.)."""
args = self.sdist_args(spec, prefix)
self.setup_py('sdist', *args)
def sdist_args(self, spec, prefix):
"""Arguments to pass to sdist."""
return []
def register(self, spec, prefix):
"""Register the distribution with the Python package index."""
args = self.register_args(spec, prefix)
self.setup_py('register', *args)
def register_args(self, spec, prefix):
"""Arguments to pass to register."""
return []
def bdist(self, spec, prefix):
"""Create a built (binary) distribution."""
args = self.bdist_args(spec, prefix)
self.setup_py('bdist', *args)
def bdist_args(self, spec, prefix):
"""Arguments to pass to bdist."""
return []
def bdist_dumb(self, spec, prefix):
'''Create a "dumb" built distribution.'''
args = self.bdist_dumb_args(spec, prefix)
self.setup_py('bdist_dumb', *args)
def bdist_dumb_args(self, spec, prefix):
"""Arguments to pass to bdist_dumb."""
return []
def bdist_rpm(self, spec, prefix):
"""Create an RPM distribution."""
args = self.bdist_rpm(spec, prefix)
self.setup_py('bdist_rpm', *args)
def bdist_rpm_args(self, spec, prefix):
"""Arguments to pass to bdist_rpm."""
return []
def bdist_wininst(self, spec, prefix):
"""Create an executable installer for MS Windows."""
args = self.bdist_wininst_args(spec, prefix)
self.setup_py('bdist_wininst', *args)
def bdist_wininst_args(self, spec, prefix):
"""Arguments to pass to bdist_wininst."""
return []
def upload(self, spec, prefix):
"""Upload binary package to PyPI."""
args = self.upload_args(spec, prefix)
self.setup_py('upload', *args)
def upload_args(self, spec, prefix):
"""Arguments to pass to upload."""
return []
def check(self, spec, prefix):
"""Perform some checks on the package."""
args = self.check_args(spec, prefix)
self.setup_py('check', *args)
def check_args(self, spec, prefix):
"""Arguments to pass to check."""
return []
# Check that self.prefix is there after installation
PackageBase.sanity_check('install')(PackageBase.sanity_check_prefix)

View File

@ -30,7 +30,8 @@
build_system_to_phase = { build_system_to_phase = {
CMakePackage: 'build', CMakePackage: 'build',
AutotoolsPackage: 'build' AutotoolsPackage: 'build',
PythonPackage: 'build'
} }

View File

@ -194,19 +194,20 @@ def install(self, spec, prefix):
class PythonPackageTemplate(PackageTemplate): class PythonPackageTemplate(PackageTemplate):
"""Provides appropriate overrides for Python extensions""" """Provides appropriate overrides for python extensions"""
base_class_name = 'PythonPackage'
dependencies = """\ dependencies = """\
extends('python') # FIXME: Add dependencies if required.
# FIXME: Add additional dependencies if required.
# depends_on('py-setuptools', type='build') # depends_on('py-setuptools', type='build')
# depends_on('py-foo', type=('build', 'run'))""" # depends_on('py-foo', type=('build', 'run'))"""
body = """\ body = """\
def install(self, spec, prefix): def build_args(self):
# FIXME: Add logic to build and install here. # FIXME: Add arguments other than --prefix
setup_py('install', '--prefix={0}'.format(prefix))""" # FIXME: If not needed delete the function
args = []
return args"""
def __init__(self, name, *args): def __init__(self, name, *args):
# If the user provided `--name py-numpy`, don't rename it py-py-numpy # If the user provided `--name py-numpy`, don't rename it py-py-numpy

View File

@ -289,9 +289,10 @@ def extends(spec, **kwargs):
""" """
def _execute(pkg): def _execute(pkg):
if pkg.extendees: # if pkg.extendees:
msg = 'Packages can extend at most one other package.' # directive = 'extends'
raise DirectiveError(msg) # msg = 'Packages can extend at most one other package.'
# raise DirectiveError(directive, msg)
when = kwargs.pop('when', pkg.name) when = kwargs.pop('when', pkg.name)
_depends_on(pkg, spec, when=when) _depends_on(pkg, spec, when=when)
@ -344,8 +345,9 @@ def variant(name, default=False, description=""):
def _execute(pkg): def _execute(pkg):
if not re.match(spack.spec.identifier_re, name): if not re.match(spack.spec.identifier_re, name):
msg = 'Invalid variant name in {0}: \'{1}\'' directive = 'variant'
raise DirectiveError(msg.format(pkg.name, name)) msg = "Invalid variant name in {0}: '{1}'"
raise DirectiveError(directive, msg.format(pkg.name, name))
pkg.variants[name] = Variant(default, description) pkg.variants[name] = Variant(default, description)
return _execute return _execute

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class Py3to2(Package): class Py3to2(PythonPackage):
"""lib3to2 is a set of fixers that are intended to backport code written """lib3to2 is a set of fixers that are intended to backport code written
for Python version 3.x into Python version 2.x.""" for Python version 3.x into Python version 2.x."""
@ -33,8 +33,3 @@ class Py3to2(Package):
url = "https://pypi.python.org/packages/source/3/3to2/3to2-1.1.1.zip" url = "https://pypi.python.org/packages/source/3/3to2/3to2-1.1.1.zip"
version('1.1.1', 'cbeed28e350dbdaef86111ace3052824') version('1.1.1', 'cbeed28e350dbdaef86111ace3052824')
extends('python')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyAlabaster(Package): class PyAlabaster(PythonPackage):
"""Alabaster is a visually (c)lean, responsive, configurable theme """Alabaster is a visually (c)lean, responsive, configurable theme
for the Sphinx documentation system.""" for the Sphinx documentation system."""
@ -35,9 +35,4 @@ class PyAlabaster(Package):
version('0.7.9', 'b29646a8bbe7aa52830375b7d17b5d7a', version('0.7.9', 'b29646a8bbe7aa52830375b7d17b5d7a',
url="https://pypi.python.org/packages/71/c3/70da7d8ac18a4f4c502887bd2549e05745fa403e2cd9d06a8a9910a762bc/alabaster-0.7.9.tar.gz") url="https://pypi.python.org/packages/71/c3/70da7d8ac18a4f4c502887bd2549e05745fa403e2cd9d06a8a9910a762bc/alabaster-0.7.9.tar.gz")
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyArgcomplete(Package): class PyArgcomplete(PythonPackage):
"""Bash tab completion for argparse.""" """Bash tab completion for argparse."""
homepage = "https://pypi.python.org/pypi/argcomplete" homepage = "https://pypi.python.org/pypi/argcomplete"
@ -34,7 +34,3 @@ class PyArgcomplete(Package):
version('1.1.1', '89a3839096c9f991ad33828e72d21abf') version('1.1.1', '89a3839096c9f991ad33828e72d21abf')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
extends('python')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -22,11 +22,10 @@
# License along with this program; if not, write to the Free Software # License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
############################################################################## ##############################################################################
from spack import depends_on, extends, version from spack import *
from spack import Package
class PyAstroid(Package): class PyAstroid(PythonPackage):
homepage = "https://www.astroid.org/" homepage = "https://www.astroid.org/"
url = "https://github.com/PyCQA/astroid/archive/astroid-1.4.5.tar.gz" url = "https://github.com/PyCQA/astroid/archive/astroid-1.4.5.tar.gz"
@ -36,10 +35,6 @@ class PyAstroid(Package):
version('1.4.2', '677f7965840f375af51b0e86403bee6a') version('1.4.2', '677f7965840f375af51b0e86403bee6a')
version('1.4.1', 'ed70bfed5e4b25be4292e7fe72da2c02') version('1.4.1', 'ed70bfed5e4b25be4292e7fe72da2c02')
extends('python')
depends_on('py-logilab-common', type=('build', 'run')) depends_on('py-logilab-common', type=('build', 'run'))
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('py-six', type=('build', 'run')) depends_on('py-six', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyAstropy(Package): class PyAstropy(PythonPackage):
"""The Astropy Project is a community effort to develop a single core """The Astropy Project is a community effort to develop a single core
package for Astronomy in Python and foster interoperability between package for Astronomy in Python and foster interoperability between
Python astronomy packages.""" Python astronomy packages."""
@ -37,7 +37,6 @@ class PyAstropy(Package):
version('1.1.post1', 'b52919f657a37d45cc45f5cb0f58c44d') version('1.1.post1', 'b52919f657a37d45cc45f5cb0f58c44d')
# Required dependencies # Required dependencies
extends('python')
depends_on('py-numpy', type=('build', 'run')) depends_on('py-numpy', type=('build', 'run'))
# Optional dependencies # Optional dependencies
@ -55,6 +54,5 @@ class PyAstropy(Package):
depends_on('cfitsio') depends_on('cfitsio')
depends_on('expat') depends_on('expat')
def install(self, spec, prefix): def build_args(self, spec, prefix):
setup_py('build', '--use-system-cfitsio', '--use-system-expat') return ['--use-system-cfitsio', '--use-system-expat']
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyAutopep8(Package): class PyAutopep8(PythonPackage):
"""autopep8 automatically formats Python code to conform to the """autopep8 automatically formats Python code to conform to the
PEP 8 style guide.""" PEP 8 style guide."""
@ -48,6 +48,3 @@ def url_for_version(self, version):
return url.format('v', version) return url.format('v', version)
else: else:
return url.format('ver', version) return url.format('ver', version)
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyBabel(Package): class PyBabel(PythonPackage):
"""Babel is an integrated collection of utilities that assist in """Babel is an integrated collection of utilities that assist in
internationalizing and localizing Python applications, with an internationalizing and localizing Python applications, with an
emphasis on web-based applications.""" emphasis on web-based applications."""
@ -36,10 +36,5 @@ class PyBabel(Package):
version('2.3.4', 'afa20bc55b0e991833030129ad498f35', version('2.3.4', 'afa20bc55b0e991833030129ad498f35',
url="https://pypi.python.org/packages/6e/96/ba2a2462ed25ca0e651fb7b66e7080f5315f91425a07ea5b34d7c870c114/Babel-2.3.4.tar.gz") url="https://pypi.python.org/packages/6e/96/ba2a2462ed25ca0e651fb7b66e7080f5315f91425a07ea5b34d7c870c114/Babel-2.3.4.tar.gz")
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('py-pytz', type=('build', 'run')) depends_on('py-pytz', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,17 +25,12 @@
from spack import * from spack import *
class PyBackportsAbc(Package): class PyBackportsAbc(PythonPackage):
"""Backports_ABC: A backport of recent additions to the 'collections.abc' """Backports_ABC: A backport of recent additions to the 'collections.abc'
module.""" module."""
homepage = "https://github.com/cython/backports_abc" homepage = "https://github.com/cython/backports_abc"
# base https://pypi.python.org/pypi/backports_abc/
url = "https://github.com/cython/backports_abc/archive/0.4.tar.gz" url = "https://github.com/cython/backports_abc/archive/0.4.tar.gz"
version('0.4', 'e4246ae689221c9cbe84369fdb59e8c74d02b298') version('0.4', 'e4246ae689221c9cbe84369fdb59e8c74d02b298')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyBackportsShutilGetTerminalSize(Package): class PyBackportsShutilGetTerminalSize(PythonPackage):
"""A backport of the get_terminal_size function """A backport of the get_terminal_size function
from Python 3.3's shutil.""" from Python 3.3's shutil."""
@ -34,10 +34,5 @@ class PyBackportsShutilGetTerminalSize(Package):
version('1.0.0', '03267762480bd86b50580dc19dff3c66') version('1.0.0', '03267762480bd86b50580dc19dff3c66')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('python@:3.2.999') depends_on('python@:3.2.999')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyBackportsSslMatchHostname(Package): class PyBackportsSslMatchHostname(PythonPackage):
"""The ssl.match_hostname() function from Python 3.5""" """The ssl.match_hostname() function from Python 3.5"""
homepage = "https://pypi.python.org/pypi/backports.ssl_match_hostname" homepage = "https://pypi.python.org/pypi/backports.ssl_match_hostname"
@ -33,9 +33,4 @@ class PyBackportsSslMatchHostname(Package):
version('3.5.0.1', 'c03fc5e2c7b3da46b81acf5cbacfe1e6') version('3.5.0.1', 'c03fc5e2c7b3da46b81acf5cbacfe1e6')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -26,7 +26,7 @@
import os import os
class PyBasemap(Package): class PyBasemap(PythonPackage):
"""The matplotlib basemap toolkit is a library for plotting """The matplotlib basemap toolkit is a library for plotting
2D data on maps in Python.""" 2D data on maps in Python."""
@ -35,17 +35,18 @@ class PyBasemap(Package):
version('1.0.7', '48c0557ced9e2c6e440b28b3caff2de8') version('1.0.7', '48c0557ced9e2c6e440b28b3caff2de8')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('py-numpy', type=('build', 'run')) depends_on('py-numpy', type=('build', 'run'))
depends_on('py-matplotlib', type=('build', 'run')) depends_on('py-matplotlib', type=('build', 'run'))
depends_on('pil', type=('build', 'run')) depends_on('pil', type=('build', 'run'))
depends_on("geos") depends_on('geos')
def install(self, spec, prefix): def setup_environment(self, spack_env, run_env):
env['GEOS_DIR'] = spec['geos'].prefix spack_env.set('GEOS_DIR', self.spec['geos'].prefix)
setup_py('install', '--prefix=%s' % prefix)
@PythonPackage.sanity_check('install')
def post_install_patch(self):
spec = self.spec
# We are not sure if this fix is needed before Python 3.5.2. # We are not sure if this fix is needed before Python 3.5.2.
# If it is needed, this test should be changed. # If it is needed, this test should be changed.
# See: https://github.com/LLNL/spack/pull/1964 # See: https://github.com/LLNL/spack/pull/1964

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyBeautifulsoup4(Package): class PyBeautifulsoup4(PythonPackage):
"""Beautiful Soup is a Python library for pulling data out of HTML and """Beautiful Soup is a Python library for pulling data out of HTML and
XML files. It works with your favorite parser to provide idiomatic ways XML files. It works with your favorite parser to provide idiomatic ways
of navigating, searching, and modifying the parse tree.""" of navigating, searching, and modifying the parse tree."""
@ -38,9 +38,4 @@ class PyBeautifulsoup4(Package):
'download/4.5/beautifulsoup4-4.5.1.tar.gz') 'download/4.5/beautifulsoup4-4.5.1.tar.gz')
version('4.4.1', '8fbd9a7cac0704645fa20d1419036815') version('4.4.1', '8fbd9a7cac0704645fa20d1419036815')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyBiopython(Package): class PyBiopython(PythonPackage):
"""A distributed collaborative effort to develop Python libraries and """A distributed collaborative effort to develop Python libraries and
applications which address the needs of current and future work in applications which address the needs of current and future work in
bioinformatics. bioinformatics.
@ -36,9 +36,5 @@ class PyBiopython(Package):
version('1.65', '143e7861ade85c0a8b5e2bbdd1da1f67') version('1.65', '143e7861ade85c0a8b5e2bbdd1da1f67')
extends('python')
depends_on('py-mx', type=('build', 'run')) depends_on('py-mx', type=('build', 'run'))
depends_on('py-numpy', type=('build', 'run')) depends_on('py-numpy', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -0,0 +1,39 @@
##############################################################################
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License (as
# published by the Free Software Foundation) version 2.1, February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
class PyBleach(PythonPackage):
"""An easy whitelist-based HTML-sanitizing tool."""
homepage = "http://github.com/mozilla/bleach"
url = "https://pypi.python.org/packages/99/00/25a8fce4de102bf6e3cc76bc4ea60685b2fee33bde1b34830c70cacc26a7/bleach-1.5.0.tar.gz"
version('1.5.0', 'b663300efdf421b3b727b19d7be9c7e7')
depends_on('python@2.6:2.7,3.2:3.5')
depends_on('py-setuptools', type='build')
depends_on('py-six', type=('build', 'run'))
depends_on('py-html5lib@0.999,0.999999:0.9999999', type=('build', 'run'))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyBlessings(Package): class PyBlessings(PythonPackage):
"""A nicer, kinder way to write to the terminal """ """A nicer, kinder way to write to the terminal """
homepage = "https://github.com/erikrose/blessings" homepage = "https://github.com/erikrose/blessings"
url = "https://pypi.python.org/packages/source/b/blessings/blessings-1.6.tar.gz" url = "https://pypi.python.org/packages/source/b/blessings/blessings-1.6.tar.gz"
@ -33,8 +33,3 @@ class PyBlessings(Package):
version('1.6', '4f552a8ebcd4982693c92571beb99394') version('1.6', '4f552a8ebcd4982693c92571beb99394')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
extends("python")
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,15 +25,11 @@
from spack import * from spack import *
class PyBottleneck(Package): class PyBottleneck(PythonPackage):
"""A collection of fast NumPy array functions written in Cython.""" """A collection of fast NumPy array functions written in Cython."""
homepage = "https://pypi.python.org/pypi/Bottleneck/1.0.0" 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" url = "https://pypi.python.org/packages/source/B/Bottleneck/Bottleneck-1.0.0.tar.gz"
version('1.0.0', '380fa6f275bd24f27e7cf0e0d752f5d2') version('1.0.0', '380fa6f275bd24f27e7cf0e0d752f5d2')
extends('python')
depends_on('py-numpy', type=('build', 'run')) depends_on('py-numpy', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,18 +25,13 @@
from spack import * from spack import *
class PyCclib(Package): class PyCclib(PythonPackage):
"""Open source library for parsing and interpreting the results of """Open source library for parsing and interpreting the results of
computational chemistry packages""" computational chemistry packages"""
homepage = "https://cclib.github.io/" homepage = "https://cclib.github.io/"
url = "https://github.com/cclib/cclib/releases/download/v1.5/cclib-1.5.tar.gz"
version('1.5', 'c06940101c4796bce82036b13fecb73c') version('1.5.post1', '1a50be48e4597b1a6dabe943da82a43c',
url="https://github.com/cclib/cclib/releases/download/v1.5/cclib-1.5.post1.tar.gz")
extends('python')
depends_on('py-numpy@1.5:', type=('build', 'run')) depends_on('py-numpy@1.5:', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyCdo(Package): class PyCdo(PythonPackage):
"""The cdo package provides an interface to the Climate Data """The cdo package provides an interface to the Climate Data
Operators from Python.""" Operators from Python."""
@ -35,13 +35,8 @@ class PyCdo(Package):
version('1.3.2', '4b3686ec1b9b891f166c1c466c6db745', version('1.3.2', '4b3686ec1b9b891f166c1c466c6db745',
url="https://pypi.python.org/packages/d6/13/908e7c1451e1f5fb68405f341cdcb3196a16952ebfe1f172cb788f864aa9/cdo-1.3.2.tar.gz") url="https://pypi.python.org/packages/d6/13/908e7c1451e1f5fb68405f341cdcb3196a16952ebfe1f172cb788f864aa9/cdo-1.3.2.tar.gz")
extends('python')
depends_on('cdo') depends_on('cdo')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('py-scipy', type=('build', 'run')) depends_on('py-scipy', type=('build', 'run'))
depends_on('py-netcdf', type=('build', 'run')) depends_on('py-netcdf', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,18 +25,13 @@
from spack import * from spack import *
class PyCertifi(Package): class PyCertifi(PythonPackage):
"""Certifi: A carefully curated collection of Root Certificates for validating """Certifi: A carefully curated collection of Root Certificates for validating
the trustworthiness of SSL certificates while verifying the identity of TLS the trustworthiness of SSL certificates while verifying the identity of TLS
hosts.""" hosts."""
homepage = "https://github.com/certifi/python-certifi" 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" url = "https://github.com/certifi/python-certifi/archive/2016.02.28.tar.gz"
version('2016.02.28', '5ccfc23bd5e931863f0b01ef3e9d2dbd3bef0e1b') version('2016.02.28', '5ccfc23bd5e931863f0b01ef3e9d2dbd3bef0e1b')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -22,12 +22,10 @@
# License along with this program; if not, write to the Free Software # License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
############################################################################## ##############################################################################
import os
from spack import * from spack import *
class PyCffi(Package): class PyCffi(PythonPackage):
"""Foreign Function Interface for Python calling C code""" """Foreign Function Interface for Python calling C code"""
homepage = "http://cffi.readthedocs.org/en/latest/" homepage = "http://cffi.readthedocs.org/en/latest/"
# base https://pypi.python.org/pypi/cffi # base https://pypi.python.org/pypi/cffi
@ -35,18 +33,15 @@ class PyCffi(Package):
version('1.1.2', 'ca6e6c45b45caa87aee9adc7c796eaea') version('1.1.2', 'ca6e6c45b45caa87aee9adc7c796eaea')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('py-pycparser', type=('build', 'run')) depends_on('py-pycparser', type=('build', 'run'))
depends_on('libffi') 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 # This sets the compiler (and flags) that distutils will use
# to create the final shared library. It will use the # to create the final shared library. It will use the
# compiler specified by the environment variable 'CC' for all # compiler specified by the environment variable 'CC' for all
# other compilation. We are setting the 'LDSHARED" to the # other compilation. We are setting the 'LDSHARED" to the
# spack compiler wrapper plus a few extra flags necessary for # spack compiler wrapper plus a few extra flags necessary for
# building the shared library. # building the shared library.
os.environ['LDSHARED'] = "{0} -shared -pthread".format(spack_cc) spack_env.set('LDSHARED', "{0} -shared -pthread".format(spack_cc))
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyConfigparser(Package): class PyConfigparser(PythonPackage):
"""This library brings the updated configparser from Python 3.5 to """This library brings the updated configparser from Python 3.5 to
Python 2.6-3.5.""" Python 2.6-3.5."""
@ -35,12 +35,10 @@ class PyConfigparser(Package):
version('3.5.0', 'cfdd915a5b7a6c09917a64a573140538', version('3.5.0', 'cfdd915a5b7a6c09917a64a573140538',
url="https://pypi.python.org/packages/7c/69/c2ce7e91c89dc073eb1aa74c0621c3eefbffe8216b3f9af9d3885265c01c/configparser-3.5.0.tar.gz") 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('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') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyCoverage(Package): class PyCoverage(PythonPackage):
""" Testing coverage checker for python """ """ Testing coverage checker for python """
homepage = "http://nedbatchelder.com/code/coverage/" homepage = "http://nedbatchelder.com/code/coverage/"
@ -34,8 +34,3 @@ class PyCoverage(Package):
version('4.0a6', '1bb4058062646148965bef0796b61efc') version('4.0a6', '1bb4058062646148965bef0796b61efc')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
extends('python')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyCsvkit(Package): class PyCsvkit(PythonPackage):
"""A library of utilities for working with CSV, the king of tabular file """A library of utilities for working with CSV, the king of tabular file
formats""" formats"""
@ -34,14 +34,9 @@ class PyCsvkit(Package):
version('0.9.1', '48d78920019d18846933ee969502fff6') version('0.9.1', '48d78920019d18846933ee969502fff6')
extends('python')
depends_on('py-dateutil', type=('build', 'run')) depends_on('py-dateutil', type=('build', 'run'))
depends_on('py-dbf', type=('build', 'run')) depends_on('py-dbf', type=('build', 'run'))
depends_on('py-xlrd', type=('build', 'run')) depends_on('py-xlrd', type=('build', 'run'))
depends_on('py-sqlalchemy', type=('build', 'run')) depends_on('py-sqlalchemy', type=('build', 'run'))
depends_on('py-six', type=('build', 'run')) depends_on('py-six', type=('build', 'run'))
depends_on('py-openpyxl', type=('build', 'run')) depends_on('py-openpyxl', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyCycler(Package): class PyCycler(PythonPackage):
"""Composable style cycles.""" """Composable style cycles."""
homepage = "http://matplotlib.org/cycler/" homepage = "http://matplotlib.org/cycler/"
@ -33,10 +33,5 @@ class PyCycler(Package):
version('0.10.0', '83dd0df7810e838b59e4dd9fa6e2d198') version('0.10.0', '83dd0df7810e838b59e4dd9fa6e2d198')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('py-six', type=('build', 'run')) depends_on('py-six', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyCython(Package): class PyCython(PythonPackage):
"""The Cython compiler for writing C extensions for the Python language.""" """The Cython compiler for writing C extensions for the Python language."""
homepage = "https://pypi.python.org/pypi/cython" homepage = "https://pypi.python.org/pypi/cython"
url = "https://pypi.io/packages/source/c/cython/Cython-0.25.2.tar.gz" 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... # These versions contain illegal Python3 code...
version('0.22', '1ae25add4ef7b63ee9b4af697300d6b6') version('0.22', '1ae25add4ef7b63ee9b4af697300d6b6')
version('0.21.2', 'd21adb870c75680dc857cd05d41046a4') version('0.21.2', 'd21adb870c75680dc857cd05d41046a4')
extends('python')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,16 +25,11 @@
from spack import * from spack import *
class PyDask(Package): class PyDask(PythonPackage):
"""Minimal task scheduling abstraction""" """Minimal task scheduling abstraction"""
homepage = "https://github.com/dask/dask/" homepage = "https://github.com/dask/dask/"
url = "https://pypi.python.org/packages/source/d/dask/dask-0.8.1.tar.gz" url = "https://pypi.python.org/packages/source/d/dask/dask-0.8.1.tar.gz"
version('0.8.1', '5dd8e3a3823b3bc62c9a6d192e2cb5b4') version('0.8.1', '5dd8e3a3823b3bc62c9a6d192e2cb5b4')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyDateutil(Package): class PyDateutil(PythonPackage):
"""Extensions to the standard Python datetime module.""" """Extensions to the standard Python datetime module."""
homepage = "https://pypi.python.org/pypi/dateutil" homepage = "https://pypi.python.org/pypi/dateutil"
url = "https://pypi.python.org/packages/source/p/python-dateutil/python-dateutil-2.4.0.tar.gz" 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.4.2', '4ef68e1c485b09e9f034e10473e5add2')
version('2.5.2', 'eafe168e8f404bf384514f5116eedbb6') version('2.5.2', 'eafe168e8f404bf384514f5116eedbb6')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('py-six', type=('build', 'run')) depends_on('py-six', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyDbf(Package): class PyDbf(PythonPackage):
"""Pure python package for reading/writing dBase, FoxPro, and Visual FoxPro """Pure python package for reading/writing dBase, FoxPro, and Visual FoxPro
.dbf files (including memos)""" .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" url = "https://pypi.python.org/packages/source/d/dbf/dbf-0.96.005.tar.gz"
version('0.96.005', 'bce1a1ed8b454a30606e7e18dd2f8277') version('0.96.005', 'bce1a1ed8b454a30606e7e18dd2f8277')
extends('python')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyDecorator(Package): class PyDecorator(PythonPackage):
"""The aim of the decorator module it to simplify the usage of decorators """The aim of the decorator module it to simplify the usage of decorators
for the average programmer, and to popularize decorators by showing for the average programmer, and to popularize decorators by showing
various non-trivial examples.""" various non-trivial examples."""
@ -34,9 +34,4 @@ class PyDecorator(Package):
version('4.0.9', 'f12c5651ccd707e12a0abaa4f76cd69a') version('4.0.9', 'f12c5651ccd707e12a0abaa4f76cd69a')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyDocutils(Package): class PyDocutils(PythonPackage):
"""Docutils is an open-source text processing system for processing """Docutils is an open-source text processing system for processing
plaintext documentation into useful formats, such as HTML, LaTeX, plaintext documentation into useful formats, such as HTML, LaTeX,
man-pages, open-document or XML. It includes reStructuredText, the man-pages, open-document or XML. It includes reStructuredText, the
@ -35,9 +35,6 @@ class PyDocutils(Package):
homepage = "http://docutils.sourceforge.net/" homepage = "http://docutils.sourceforge.net/"
url = "https://pypi.python.org/packages/source/d/docutils/docutils-0.12.tar.gz" url = "https://pypi.python.org/packages/source/d/docutils/docutils-0.12.tar.gz"
version('0.12', '4622263b62c5c771c03502afa3157768') version('0.13.1', 'ea4a893c633c788be9b8078b6b305d53',
url="https://pypi.python.org/packages/05/25/7b5484aca5d46915493f1fd4ecb63c38c333bd32aa9ad6e19da8d08895ae/docutils-0.13.1.tar.gz")
extends('python') version('0.12', '4622263b62c5c771c03502afa3157768')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyEmcee(Package): class PyEmcee(PythonPackage):
"""emcee is an MIT licensed pure-Python implementation of Goodman & Weare's """emcee is an MIT licensed pure-Python implementation of Goodman & Weare's
Affine Invariant Markov chain Monte Carlo (MCMC) Ensemble sampler.""" Affine Invariant Markov chain Monte Carlo (MCMC) Ensemble sampler."""
@ -34,8 +34,4 @@ class PyEmcee(Package):
version('2.1.0', 'c6b6fad05c824d40671d4a4fc58dfff7') version('2.1.0', 'c6b6fad05c824d40671d4a4fc58dfff7')
extends('python')
depends_on('py-numpy', type=('build', 'run')) depends_on('py-numpy', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * 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.""" """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" homepage = "https://pypi.python.org/pypi/enum34"
@ -34,12 +34,10 @@ class PyEnum34(Package):
version('1.1.6', '5f13a0841a61f7fc295c514490d120d0', version('1.1.6', '5f13a0841a61f7fc295c514490d120d0',
url="https://pypi.python.org/packages/bf/3e/31d502c25302814a7c2f1d3959d2a3b3f78e509002ba91aea64993936876/enum34-1.1.6.tar.gz") 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('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') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,15 +25,10 @@
from spack import * from spack import *
class PyEpydoc(Package): class PyEpydoc(PythonPackage):
"""Epydoc is a tool for generating API documentation documentation for """Epydoc is a tool for generating API documentation documentation for
Python modules, based on their docstrings.""" Python modules, based on their docstrings."""
homepage = "https://pypi.python.org/pypi/epydoc" homepage = "https://pypi.python.org/pypi/epydoc"
url = "https://pypi.python.org/packages/source/e/epydoc/epydoc-3.0.1.tar.gz" url = "https://pypi.python.org/packages/source/e/epydoc/epydoc-3.0.1.tar.gz"
version('3.0.1', '36407974bd5da2af00bf90ca27feeb44') version('3.0.1', '36407974bd5da2af00bf90ca27feeb44')
extends('python')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyFlake8(Package): class PyFlake8(PythonPackage):
"""Flake8 is a wrapper around PyFlakes, pep8 and Ned Batchelder's """Flake8 is a wrapper around PyFlakes, pep8 and Ned Batchelder's
McCabe script.""" McCabe script."""
@ -43,7 +43,7 @@ class PyFlake8(Package):
depends_on('py-setuptools', type=('build', 'run')) depends_on('py-setuptools', type=('build', 'run'))
# pyflakes >= 0.8.1, != 1.2.0, != 1.2.1, != 1.2.2, < 1.3.0 # 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 # pyflakes >= 0.8.1, < 1.1
depends_on('py-pyflakes@0.8.1:1.0.0', when='@2.5.4', type=('build', 'run')) 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 # 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-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')) # These dependencies breaks concretization
depends_on('py-enum34', when='^python@:3.1.999', type=('build', 'run')) # 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 # TODO: Add test dependencies
# depends_on('py-nose', type='test') # depends_on('py-nose', type='test')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,16 +25,11 @@
from spack import * from spack import *
class PyFuncsigs(Package): class PyFuncsigs(PythonPackage):
"""Python function signatures from PEP362 for Python 2.6, 2.7 and 3.2.""" """Python function signatures from PEP362 for Python 2.6, 2.7 and 3.2."""
homepage = "https://pypi.python.org/pypi/funcsigs" homepage = "https://pypi.python.org/pypi/funcsigs"
url = "https://pypi.python.org/packages/source/f/funcsigs/funcsigs-0.4.tar.gz" url = "https://pypi.python.org/packages/source/f/funcsigs/funcsigs-0.4.tar.gz"
version('0.4', 'fb1d031f284233e09701f6db1281c2a5') version('0.4', 'fb1d031f284233e09701f6db1281c2a5')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,17 +25,11 @@
from spack import * from spack import *
class PyFunctools32(Package): class PyFunctools32(PythonPackage):
"""Backport of the functools module from Python 3.2.3 for use on 2.7 and """Backport of the functools module from Python 3.2.3 for use on 2.7 and
PyPy.""" PyPy."""
homepage = "https://github.com/MiCHiLU/python-functools32" homepage = "https://github.com/MiCHiLU/python-functools32"
# base https://pypi.python.org/pypi/functools32
url = "https://pypi.python.org/packages/source/f/functools32/functools32-3.2.3-2.tar.gz" url = "https://pypi.python.org/packages/source/f/functools32/functools32-3.2.3-2.tar.gz"
version('3.2.3-2', '09f24ffd9af9f6cd0f63cb9f4e23d4b2') version('3.2.3-2', '09f24ffd9af9f6cd0f63cb9f4e23d4b2')
extends('python')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyFutures(Package): class PyFutures(PythonPackage):
"""Backport of the concurrent.futures package from Python 3.2""" """Backport of the concurrent.futures package from Python 3.2"""
homepage = "https://pypi.python.org/pypi/futures" homepage = "https://pypi.python.org/pypi/futures"
@ -33,9 +33,4 @@ class PyFutures(Package):
version('3.0.5', 'ced2c365e518242512d7a398b515ff95') version('3.0.5', 'ced2c365e518242512d7a398b515ff95')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -36,6 +36,9 @@ class PyGenders(Package):
url='https://github.com/chaos/genders/releases/download/genders-1-22-1/genders-1.22.tar.gz') url='https://github.com/chaos/genders/releases/download/genders-1-22-1/genders-1.22.tar.gz')
extends('python') extends('python')
# FIXME: Missing a dependency on genders
# #include <genders.h>
def install(self, spec, prefix): def install(self, spec, prefix):
configure("--prefix=%s" % prefix) configure("--prefix=%s" % prefix)
make(parallel=False) make(parallel=False)

View File

@ -22,11 +22,10 @@
# License along with this program; if not, write to the Free Software # License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
############################################################################## ##############################################################################
from spack import version, extends, depends_on from spack import *
from spack import Package
class PyGenshi(Package): class PyGenshi(PythonPackage):
"""Python toolkit for generation of output for the web""" """Python toolkit for generation of output for the web"""
homepage = "https://genshi.edgewall.org/" homepage = "https://genshi.edgewall.org/"
url = "http://ftp.edgewall.com/pub/genshi/Genshi-0.7.tar.gz" url = "http://ftp.edgewall.com/pub/genshi/Genshi-0.7.tar.gz"
@ -35,8 +34,4 @@ class PyGenshi(Package):
version('0.6.1', '372c368c8931110b0a521fa6091742d7') version('0.6.1', '372c368c8931110b0a521fa6091742d7')
version('0.6', '604e8b23b4697655d36a69c2d8ef7187') version('0.6', '604e8b23b4697655d36a69c2d8ef7187')
extends("python")
depends_on("py-setuptools", type='build') depends_on("py-setuptools", type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyGnuplot(Package): class PyGnuplot(PythonPackage):
"""Gnuplot.py is a Python package that allows you to create graphs from """Gnuplot.py is a Python package that allows you to create graphs from
within Python using the gnuplot plotting program.""" within Python using the gnuplot plotting program."""
homepage = "http://gnuplot-py.sourceforge.net/" homepage = "http://gnuplot-py.sourceforge.net/"
@ -33,8 +33,4 @@ class PyGnuplot(Package):
version('1.8', 'abd6f571e7aec68ae7db90a5217cd5b1') version('1.8', 'abd6f571e7aec68ae7db90a5217cd5b1')
extends('python')
depends_on('py-numpy', type=('build', 'run')) depends_on('py-numpy', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyH5py(Package): class PyH5py(PythonPackage):
"""The h5py package provides both a high- and low-level interface to the """The h5py package provides both a high- and low-level interface to the
HDF5 library from Python.""" HDF5 library from Python."""
@ -38,8 +38,6 @@ class PyH5py(Package):
variant('mpi', default=True, description='Build with MPI support') variant('mpi', default=True, description='Build with MPI support')
extends('python')
# Build dependencies # Build dependencies
depends_on('py-cython@0.19:', type='build') depends_on('py-cython@0.19:', type='build')
depends_on('pkg-config', type='build') depends_on('pkg-config', type='build')
@ -55,11 +53,11 @@ class PyH5py(Package):
# Runtime dependencies # Runtime dependencies
depends_on('py-six', type=('build', 'run')) depends_on('py-six', type=('build', 'run'))
def install(self, spec, prefix): phases = ['configure', 'install']
setup_py('configure', '--hdf5={0}'.format(spec['hdf5'].prefix))
def configure(self, spec, prefix):
self.setup_py('configure', '--hdf5={0}'.format(spec['hdf5'].prefix))
if '+mpi' in spec: if '+mpi' in spec:
env['CC'] = spec['mpi'].mpicc env['CC'] = spec['mpi'].mpicc
setup_py('configure', '--mpi') self.setup_py('configure', '--mpi')
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -0,0 +1,37 @@
##############################################################################
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License (as
# published by the Free Software Foundation) version 2.1, February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
class PyHtml5lib(PythonPackage):
"""HTML parser based on the WHATWG HTML specification."""
homepage = "https://github.com/html5lib/html5lib-python"
url = "https://pypi.python.org/packages/ae/ae/bcb60402c60932b32dfaf19bb53870b29eda2cd17551ba5639219fb5ebf9/html5lib-0.9999999.tar.gz"
version('0.9999999', 'ef43cb05e9e799f25d65d1135838a96f')
depends_on('python@2.6:2.7,3.2:3.4')
depends_on('py-six', type=('build', 'run'))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyImagesize(Package): class PyImagesize(PythonPackage):
"""Parses image file headers and returns image size. Supports PNG, JPEG, """Parses image file headers and returns image size. Supports PNG, JPEG,
JPEG2000, and GIF image file formats.""" JPEG2000, and GIF image file formats."""
@ -35,9 +35,4 @@ class PyImagesize(Package):
version('0.7.1', '976148283286a6ba5f69b0f81aef8052', version('0.7.1', '976148283286a6ba5f69b0f81aef8052',
url="https://pypi.python.org/packages/53/72/6c6f1e787d9cab2cc733cf042f125abec07209a58308831c9f292504e826/imagesize-0.7.1.tar.gz") url="https://pypi.python.org/packages/53/72/6c6f1e787d9cab2cc733cf042f125abec07209a58308831c9f292504e826/imagesize-0.7.1.tar.gz")
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyIminuit(Package): class PyIminuit(PythonPackage):
"""Interactive IPython-Friendly Minimizer based on SEAL Minuit2.""" """Interactive IPython-Friendly Minimizer based on SEAL Minuit2."""
homepage = "https://pypi.python.org/pypi/iminuit" homepage = "https://pypi.python.org/pypi/iminuit"
@ -34,13 +34,9 @@ class PyIminuit(Package):
version('1.2', '4701ec472cae42015e26251703e6e984') version('1.2', '4701ec472cae42015e26251703e6e984')
# Required dependencies # Required dependencies
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
# Optional dependencies # Optional dependencies
depends_on('py-numpy', type=('build', 'run')) depends_on('py-numpy', type=('build', 'run'))
depends_on('py-matplotlib', type=('build', 'run')) depends_on('py-matplotlib', type=('build', 'run'))
depends_on('py-cython', type='build') depends_on('py-cython', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyIpykernel(Package): class PyIpykernel(PythonPackage):
"""IPython Kernel for Jupyter""" """IPython Kernel for Jupyter"""
homepage = "https://pypi.python.org/pypi/ipykernel" homepage = "https://pypi.python.org/pypi/ipykernel"
@ -42,15 +42,10 @@ class PyIpykernel(Package):
version('4.1.1', '51376850c46fb006e1f8d1cd353507c5') version('4.1.1', '51376850c46fb006e1f8d1cd353507c5')
version('4.1.0', '638a43e4f8a15872f749090c3f0827b6') version('4.1.0', '638a43e4f8a15872f749090c3f0827b6')
extends('python')
depends_on('python@2.7:2.7.999,3.3:') depends_on('python@2.7:2.7.999,3.3:')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('py-traitlets@4.1.0:') depends_on('py-traitlets@4.1.0:', type=('build', 'run'))
depends_on('py-tornado@4.0:') depends_on('py-tornado@4.0:', type=('build', 'run'))
depends_on('py-ipython@4.0:') depends_on('py-ipython@4.0:', type=('build', 'run'))
depends_on('py-jupyter-client') depends_on('py-jupyter-client', type=('build', 'run'))
depends_on('py-pexpect') depends_on('py-pexpect', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyIpythonGenutils(Package): class PyIpythonGenutils(PythonPackage):
"""Vestigial utilities from IPython""" """Vestigial utilities from IPython"""
homepage = "https://pypi.python.org/pypi/ipython_genutils" homepage = "https://pypi.python.org/pypi/ipython_genutils"
@ -33,10 +33,5 @@ class PyIpythonGenutils(Package):
version('0.1.0', '9a8afbe0978adbcbfcb3b35b2d015a56') version('0.1.0', '9a8afbe0978adbcbfcb3b35b2d015a56')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('python@2.7:2.7.999,3.3:') depends_on('python@2.7:2.7.999,3.3:')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyIpython(Package): class PyIpython(PythonPackage):
"""IPython provides a rich toolkit to help you make the most out of using """IPython provides a rich toolkit to help you make the most out of using
Python interactively.""" Python interactively."""
homepage = "https://pypi.python.org/pypi/ipython" homepage = "https://pypi.python.org/pypi/ipython"
@ -35,13 +35,15 @@ class PyIpython(Package):
version('3.1.0', 'a749d90c16068687b0ec45a27e72ef8f') version('3.1.0', 'a749d90c16068687b0ec45a27e72ef8f')
version('2.3.1', '2b7085525dac11190bfb45bb8ec8dcbf') version('2.3.1', '2b7085525dac11190bfb45bb8ec8dcbf')
extends('python')
depends_on('py-pygments', type=('build', 'run')) depends_on('py-pygments', type=('build', 'run'))
depends_on('py-setuptools', type=('build', 'run')) depends_on('py-setuptools', type=('build', 'run'))
depends_on('py-backports-shutil-get-terminal-size', when="^python@:3.2.999")
depends_on('py-pathlib2', when="^python@:3.3.999")
depends_on('py-pickleshare')
depends_on('py-simplegeneric')
def install(self, spec, prefix): # These dependencies breaks concretization
setup_py('install', '--prefix=%s' % prefix) # See https://github.com/LLNL/spack/issues/2793
# depends_on('py-backports-shutil-get-terminal-size', when="^python@:3.2.999") # noqa
# depends_on('py-pathlib2', when="^python@:3.3.999")
depends_on('py-backports-shutil-get-terminal-size', type=('build', 'run'))
depends_on('py-pathlib2', type=('build', 'run'))
depends_on('py-pickleshare', type=('build', 'run'))
depends_on('py-simplegeneric', type=('build', 'run'))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyIpywidgets(Package): class PyIpywidgets(PythonPackage):
"""IPython widgets for the Jupyter Notebook""" """IPython widgets for the Jupyter Notebook"""
homepage = "https://github.com/ipython/ipywidgets" homepage = "https://github.com/ipython/ipywidgets"
@ -33,13 +33,8 @@ class PyIpywidgets(Package):
version('5.2.2', '112f3daa4aa0f42f8dda831cea3649c8') version('5.2.2', '112f3daa4aa0f42f8dda831cea3649c8')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('python@2.7:2.7.999,3.3:') depends_on('python@2.7:2.7.999,3.3:')
depends_on('py-ipython@4.0.0:') depends_on('py-ipython@4.0.0:', type=('build', 'run'))
depends_on('py-ipykernel@4.2.2:') depends_on('py-ipykernel@4.2.2:', type=('build', 'run'))
depends_on('py-traitlets@4.2.1:') depends_on('py-traitlets@4.2.1:', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,15 +25,10 @@
from spack import * from spack import *
class PyJdcal(Package): class PyJdcal(PythonPackage):
"""Julian dates from proleptic Gregorian and Julian calendars""" """Julian dates from proleptic Gregorian and Julian calendars"""
homepage = 'http://github.com/phn/jdcal' homepage = 'http://github.com/phn/jdcal'
url = "https://pypi.python.org/packages/source/j/jdcal/jdcal-1.2.tar.gz" url = "https://pypi.python.org/packages/source/j/jdcal/jdcal-1.2.tar.gz"
version('1.2', 'ab8d5ba300fd1eb01514f363d19b1eb9') version('1.2', 'ab8d5ba300fd1eb01514f363d19b1eb9')
extends('python')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyJinja2(Package): class PyJinja2(PythonPackage):
"""Jinja2 is a template engine written in pure Python. It provides """Jinja2 is a template engine written in pure Python. It provides
a Django inspired non-XML syntax but supports inline expressions a Django inspired non-XML syntax but supports inline expressions
and an optional sandboxed environment.""" and an optional sandboxed environment."""
@ -39,11 +39,6 @@ class PyJinja2(Package):
version('2.7.1', '282aed153e69f970d6e76f78ed9d027a') version('2.7.1', '282aed153e69f970d6e76f78ed9d027a')
version('2.7', 'c2fb12cbbb523c57d3d15bfe4dc0e8fe') version('2.7', 'c2fb12cbbb523c57d3d15bfe4dc0e8fe')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('py-markupsafe', type=('build', 'run')) depends_on('py-markupsafe', type=('build', 'run'))
depends_on('py-babel@0.8:', type=('build', 'run')) # optional, required for i18n depends_on('py-babel@0.8:', type=('build', 'run')) # optional, required for i18n
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,19 +25,18 @@
from spack import * from spack import *
class PyJsonschema(Package): class PyJsonschema(PythonPackage):
"""Jsonschema: An(other) implementation of JSON Schema for Python.""" """Jsonschema: An(other) implementation of JSON Schema for Python."""
homepage = "http://github.com/Julian/jsonschema" homepage = "http://github.com/Julian/jsonschema"
# base https://pypi.python.org/pypi/jsonschema
url = "https://pypi.python.org/packages/source/j/jsonschema/jsonschema-2.5.1.tar.gz" url = "https://pypi.python.org/packages/source/j/jsonschema/jsonschema-2.5.1.tar.gz"
version('2.5.1', '374e848fdb69a3ce8b7e778b47c30640') version('2.5.1', '374e848fdb69a3ce8b7e778b47c30640')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('py-vcversioner') depends_on('py-vcversioner', type=('build', 'run'))
depends_on('py-functools32', when="^python@2.7")
def install(self, spec, prefix): # This dependency breaks concretization
setup_py('install', '--prefix={0}'.format(prefix)) # See https://github.com/LLNL/spack/issues/2793
# depends_on('py-functools32', when="^python@2.7", type=('build', 'run'))
depends_on('py-functools32', type=('build', 'run'))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyJupyterClient(Package): class PyJupyterClient(PythonPackage):
"""Jupyter protocol client APIs""" """Jupyter protocol client APIs"""
homepage = "https://github.com/jupyter/jupyter_client" homepage = "https://github.com/jupyter/jupyter_client"
@ -40,13 +40,8 @@ class PyJupyterClient(Package):
version('4.1.0', 'cf42048b889c8434fbb5813a9eec1d34') version('4.1.0', 'cf42048b889c8434fbb5813a9eec1d34')
version('4.0.0', '00fa63c67cb3adf359d09dc4d803aff5') version('4.0.0', '00fa63c67cb3adf359d09dc4d803aff5')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('python@2.7:2.7.999,3.3:') depends_on('python@2.7:2.7.999,3.3:')
depends_on('py-traitlets') depends_on('py-traitlets', type=('build', 'run'))
depends_on('py-jupyter-core') depends_on('py-jupyter-core', type=('build', 'run'))
depends_on('py-zmq@13:') depends_on('py-zmq@13:', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyJupyterConsole(Package): class PyJupyterConsole(PythonPackage):
"""Jupyter Terminal Console""" """Jupyter Terminal Console"""
homepage = "https://github.com/jupyter/jupyter_console" homepage = "https://github.com/jupyter/jupyter_console"
@ -37,15 +37,10 @@ class PyJupyterConsole(Package):
version('4.0.3', '0e928ea261e7f8154698cf69ed4f2459') version('4.0.3', '0e928ea261e7f8154698cf69ed4f2459')
version('4.0.2', 'f2e174938c91136549b908bd39fa5d59') version('4.0.2', 'f2e174938c91136549b908bd39fa5d59')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('python@2.7:2.7.999,3.3:') depends_on('python@2.7:2.7.999,3.3:')
depends_on('py-jupyter-client') depends_on('py-jupyter-client', type=('build', 'run'))
depends_on('py-ipython') depends_on('py-ipython', type=('build', 'run'))
depends_on('py-ipykernel') depends_on('py-ipykernel', type=('build', 'run'))
depends_on('py-pygments') depends_on('py-pygments', type=('build', 'run'))
depends_on('py-prompt-toolkit@1.0.0:1.999.999') depends_on('py-prompt-toolkit@1.0.0:1.999.999', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyJupyterCore(Package): class PyJupyterCore(PythonPackage):
"""Core Jupyter functionality""" """Core Jupyter functionality"""
homepage = "http://jupyter-core.readthedocs.io/" homepage = "http://jupyter-core.readthedocs.io/"
@ -40,13 +40,8 @@ class PyJupyterCore(Package):
version('4.0.3', 'f2608f6e92f992ec8e37646b52c922a6') version('4.0.3', 'f2608f6e92f992ec8e37646b52c922a6')
version('4.0.2', 'ae0d0197c4febf43c050a97ac6277263') version('4.0.2', 'ae0d0197c4febf43c050a97ac6277263')
version('4.0.1', 'f849136b2badaaba2a8a3b397bf04639') version('4.0.1', 'f849136b2badaaba2a8a3b397bf04639')
version('4.0' , 'b6b37cb4f40bd0fcd20433cb2cc7a4c1') version('4.0', 'b6b37cb4f40bd0fcd20433cb2cc7a4c1')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('python@2.7:2.7.999,3.3:') depends_on('python@2.7:2.7.999,3.3:')
depends_on('py-traitlets') depends_on('py-traitlets', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyJupyterNotebook(Package): class PyJupyterNotebook(PythonPackage):
"""Jupyter Interactive Notebook""" """Jupyter Interactive Notebook"""
homepage = "https://github.com/jupyter/notebook" homepage = "https://github.com/jupyter/notebook"
@ -44,23 +44,18 @@ class PyJupyterNotebook(Package):
variant('terminal', default=False, description="Enable terminal functionality") variant('terminal', default=False, description="Enable terminal functionality")
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('python@2.7:2.7.999,3.3:') depends_on('python@2.7:2.7.999,3.3:')
depends_on('npm', type='build') depends_on('npm', type='build')
depends_on('py-jinja2') depends_on('py-jinja2', type=('build', 'run'))
depends_on('py-tornado@4:') depends_on('py-tornado@4:', type=('build', 'run'))
depends_on('py-ipython-genutils') depends_on('py-ipython-genutils', type=('build', 'run'))
depends_on('py-traitlets') depends_on('py-traitlets', type=('build', 'run'))
depends_on('py-jupyter-core') depends_on('py-jupyter-core', type=('build', 'run'))
depends_on('py-jupyter-client') depends_on('py-jupyter-client', type=('build', 'run'))
depends_on('py-jupyter-console') depends_on('py-jupyter-console', type=('build', 'run'))
depends_on('py-nbformat') depends_on('py-nbformat', type=('build', 'run'))
depends_on('py-nbconvert') depends_on('py-nbconvert', type=('build', 'run'))
depends_on('py-ipykernel') depends_on('py-ipykernel', type=('build', 'run'))
depends_on('py-terminado@0.3.3:', when="+terminal") depends_on('py-terminado@0.3.3:', when="+terminal", type=('build', 'run'))
depends_on('py-ipywidgets', when="+terminal") depends_on('py-ipywidgets', when="+terminal", type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyLockfile(Package): class PyLockfile(PythonPackage):
"""The lockfile package exports a LockFile class which provides a """The lockfile package exports a LockFile class which provides a
simple API for locking files. Unlike the Windows msvcrt.locking simple API for locking files. Unlike the Windows msvcrt.locking
function, the fcntl.lockf and flock functions, and the function, the fcntl.lockf and flock functions, and the
@ -41,8 +41,4 @@ class PyLockfile(Package):
version('0.10.2', '1aa6175a6d57f082cd12e7ac6102ab15') version('0.10.2', '1aa6175a6d57f082cd12e7ac6102ab15')
extends("python")
depends_on("py-setuptools", type='build') depends_on("py-setuptools", type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -22,11 +22,10 @@
# License along with this program; if not, write to the Free Software # License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
############################################################################## ##############################################################################
from spack import depends_on, extends, version from spack import *
from spack import Package
class PyLogilabCommon(Package): class PyLogilabCommon(PythonPackage):
"""Common modules used by Logilab projects""" """Common modules used by Logilab projects"""
homepage = "https://www.logilab.org/project/logilab-common" homepage = "https://www.logilab.org/project/logilab-common"
url = "https://pypi.python.org/packages/a7/31/1650d23e44794d46935d82b86e73454cc83b814cbe1365260ccce8a2f4c6/logilab-common-1.2.0.tar.gz" url = "https://pypi.python.org/packages/a7/31/1650d23e44794d46935d82b86e73454cc83b814cbe1365260ccce8a2f4c6/logilab-common-1.2.0.tar.gz"
@ -36,6 +35,3 @@ class PyLogilabCommon(Package):
extends('python', ignore=r'bin/pytest') extends('python', ignore=r'bin/pytest')
depends_on("py-setuptools", type='build') depends_on("py-setuptools", type='build')
depends_on("py-six", type=('build', 'run')) depends_on("py-six", type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -26,7 +26,7 @@
from spack import * from spack import *
class PyMacs2(Package): class PyMacs2(PythonPackage):
"""MACS2 Model-based Analysis of ChIP-Seq""" """MACS2 Model-based Analysis of ChIP-Seq"""
homepage = "https://github.com/taoliu/MACS" homepage = "https://github.com/taoliu/MACS"
@ -34,13 +34,9 @@ class PyMacs2(Package):
version('2.1.1.20160309', '2008ba838f83f34f8e0fddefe2a3a0159f4a740707c68058f815b31ddad53d26') version('2.1.1.20160309', '2008ba838f83f34f8e0fddefe2a3a0159f4a740707c68058f815b31ddad53d26')
extends('python')
depends_on('python@2.7:2.8') depends_on('python@2.7:2.8')
# Most Python packages only require py-setuptools as a build dependency. # Most Python packages only require py-setuptools as a build dependency.
# However, py-macs2 requires py-setuptools during runtime as well. # However, py-macs2 requires py-setuptools during runtime as well.
depends_on('py-setuptools', type=('build', 'run')) depends_on('py-setuptools', type=('build', 'run'))
depends_on('py-numpy@1.6:', type=('build', 'run')) depends_on('py-numpy@1.6:', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyMako(Package): class PyMako(PythonPackage):
"""A super-fast templating language that borrows the best """A super-fast templating language that borrows the best
ideas from the existing templating languages.""" ideas from the existing templating languages."""
@ -35,12 +35,7 @@ class PyMako(Package):
version('1.0.4', 'c5fc31a323dd4990683d2f2da02d4e20') version('1.0.4', 'c5fc31a323dd4990683d2f2da02d4e20')
version('1.0.1', '9f0aafd177b039ef67b90ea350497a54') version('1.0.1', '9f0aafd177b039ef67b90ea350497a54')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
# depends_on('py-mock', type='test') # TODO: Add test deptype # depends_on('py-mock', type='test') # TODO: Add test deptype
# depends_on('py-pytest', type='test') # TODO: Add test deptype # depends_on('py-pytest', type='test') # TODO: Add test deptype
depends_on('py-markupsafe@0.9.2:', type=('build', 'run')) depends_on('py-markupsafe@0.9.2:', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -26,7 +26,7 @@
from spack import * from spack import *
class PyMarkdown(Package): class PyMarkdown(PythonPackage):
"""This is a Python implementation of John Gruber's Markdown. It is """This is a Python implementation of John Gruber's Markdown. It is
almost completely compliant with the reference implementation, though almost completely compliant with the reference implementation, though
there are a few very minor differences. See John's Syntax there are a few very minor differences. See John's Syntax
@ -48,14 +48,9 @@ class PyMarkdown(Package):
version('2.5.1', 'be6f6ba65a8fb843d2aaf1fcdd68c755') version('2.5.1', 'be6f6ba65a8fb843d2aaf1fcdd68c755')
version('2.5', '8393ceab9c6e33357fb8a7be063a4849') version('2.5', '8393ceab9c6e33357fb8a7be063a4849')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('python@2.7:2.8,3.2:3.4') depends_on('python@2.7:2.8,3.2:3.4')
def url_for_version(self, version): def url_for_version(self, version):
base_url = "https://github.com/waylan/Python-Markdown/archive" base_url = "https://github.com/waylan/Python-Markdown/archive"
return "{0}/{1}-final.tar.gz".format(base_url, version) return "{0}/{1}-final.tar.gz".format(base_url, version)
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyMarkupsafe(Package): class PyMarkupsafe(PythonPackage):
"""MarkupSafe is a library for Python that implements a unicode """MarkupSafe is a library for Python that implements a unicode
string that is aware of HTML escaping rules and can be used to string that is aware of HTML escaping rules and can be used to
implement automatic string escaping. It is used by Jinja 2, the implement automatic string escaping. It is used by Jinja 2, the
@ -40,9 +40,4 @@ class PyMarkupsafe(Package):
version('0.20', '7da066d9cb191a70aa85d0a3d43565d1') version('0.20', '7da066d9cb191a70aa85d0a3d43565d1')
version('0.19', 'ccb3f746c807c5500850987006854a6d') version('0.19', 'ccb3f746c807c5500850987006854a6d')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -26,7 +26,7 @@
import os import os
class PyMatplotlib(Package): class PyMatplotlib(PythonPackage):
"""matplotlib is a python 2D plotting library which produces publication """matplotlib is a python 2D plotting library which produces publication
quality figures in a variety of hardcopy formats and interactive quality figures in a variety of hardcopy formats and interactive
environments across platforms.""" environments across platforms."""
@ -80,7 +80,7 @@ class PyMatplotlib(Package):
# --------- Optional dependencies # --------- Optional dependencies
depends_on('pkg-config', type='build') # why not... depends_on('pkg-config', type='build') # why not...
depends_on('py-pillow', when='+image', type=('build', 'run')) depends_on('pil', when='+image', type=('build', 'run'))
depends_on('py-ipython', when='+ipython') depends_on('py-ipython', when='+ipython')
depends_on('ghostscript', when='+latex', type='run') depends_on('ghostscript', when='+latex', type='run')
depends_on('texlive', when='+latex', type='run') depends_on('texlive', when='+latex', type='run')
@ -95,9 +95,10 @@ class PyMatplotlib(Package):
# depends_on('ttconv') # depends_on('ttconv')
depends_on('py-six@1.9.0:', type=('build', 'run')) depends_on('py-six@1.9.0:', type=('build', 'run'))
def install(self, spec, prefix): @PythonPackage.sanity_check('install')
setup_py('build') def set_backend(self):
setup_py('install', '--prefix={0}'.format(prefix)) spec = self.spec
prefix = self.prefix
if '+qt' in spec or '+tk' in spec: if '+qt' in spec or '+tk' in spec:
# Set backend in matplotlib configuration file # Set backend in matplotlib configuration file

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyMccabe(Package): class PyMccabe(PythonPackage):
"""Ned's script to check McCabe complexity.""" """Ned's script to check McCabe complexity."""
homepage = "https://github.com/PyCQA/mccabe" homepage = "https://github.com/PyCQA/mccabe"
@ -41,13 +41,9 @@ class PyMccabe(Package):
version('0.2', '36d4808c37e187dbb1fe2373a0ac6645') version('0.2', '36d4808c37e187dbb1fe2373a0ac6645')
version('0.1', '3c9e8e72612a9c01d865630cc569150a') version('0.1', '3c9e8e72612a9c01d865630cc569150a')
extends('python')
depends_on('python@2.7:2.8,3.3:') depends_on('python@2.7:2.8,3.3:')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
# TODO: Add test dependencies # TODO: Add test dependencies
# depends_on('py-pytest', type='test') # depends_on('py-pytest', type='test')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyMeep(Package): class PyMeep(PythonPackage):
"""Python-meep is a wrapper around libmeep. It allows the scripting of """Python-meep is a wrapper around libmeep. It allows the scripting of
Meep-simulations with Python""" Meep-simulations with Python"""
@ -36,7 +36,6 @@ class PyMeep(Package):
variant('mpi', default=True, description='Enable MPI support') variant('mpi', default=True, description='Enable MPI support')
extends('python')
depends_on('py-numpy', type=('build', 'run')) depends_on('py-numpy', type=('build', 'run'))
depends_on('py-scipy', type=('build', 'run')) depends_on('py-scipy', type=('build', 'run'))
depends_on('py-matplotlib', type=('build', 'run')) depends_on('py-matplotlib', type=('build', 'run'))
@ -50,9 +49,12 @@ class PyMeep(Package):
# or else it can't handle newer C++ compilers and flags. # or else it can't handle newer C++ compilers and flags.
depends_on('swig@1.3.39:3.0.2') depends_on('swig@1.3.39:3.0.2')
def install(self, spec, prefix): phases = ['clean', 'build_ext', 'install', 'bdist']
setup = 'setup-mpi.py' if '+mpi' in spec else 'setup.py'
def setup_file(self, spec, prefix):
return 'setup-mpi.py' if '+mpi' in spec else 'setup.py'
def common_args(self, spec, prefix):
include_dirs = [ include_dirs = [
spec['meep'].prefix.include, spec['meep'].prefix.include,
spec['py-numpy'].include spec['py-numpy'].include
@ -69,7 +71,19 @@ def install(self, spec, prefix):
include_flags = '-I{0}'.format(','.join(include_dirs)) include_flags = '-I{0}'.format(','.join(include_dirs))
library_flags = '-L{0}'.format(','.join(library_dirs)) library_flags = '-L{0}'.format(','.join(library_dirs))
python(setup, 'clean', '--all') # FIXME: For some reason, this stopped working.
python(setup, 'build_ext', include_flags, library_flags) # The -I and -L are no longer being properly forwarded to setup.py:
python(setup, 'install', '--prefix={0}'.format(prefix)) # meep_common.i:87: Error: Unable to find 'meep/mympi.hpp'
python(setup, 'bdist', include_flags, library_flags) # meep_common.i:88: Error: Unable to find 'meep/vec.hpp'
# meep_common.i:89: Error: Unable to find 'meep.hpp'
return [include_flags, library_flags]
def clean_args(self, spec, prefix):
return ['--all']
def build_ext_args(self, spec, prefix):
return self.common_args(spec, prefix)
def bdist_args(self, spec, prefix):
return self.common_args(spec, prefix)

View File

@ -22,11 +22,10 @@
# License along with this program; if not, write to the Free Software # License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
############################################################################## ##############################################################################
from spack import depends_on, extends, version from spack import *
from spack import Package
class PyMistune(Package): class PyMistune(PythonPackage):
""" """
Python markdown parser Python markdown parser
""" """
@ -39,8 +38,4 @@ class PyMistune(Package):
version('0.5.1', '1c6cfce28a4aa90cf125217cd6c6fe6c') version('0.5.1', '1c6cfce28a4aa90cf125217cd6c6fe6c')
version('0.5', '997736554f1f95eea78c66ae339b5722') version('0.5', '997736554f1f95eea78c66ae339b5722')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyMock(Package): class PyMock(PythonPackage):
"""mock is a library for testing in Python. It allows you to replace parts """mock is a library for testing in Python. It allows you to replace parts
of your system under test with mock objects and make assertions about how of your system under test with mock objects and make assertions about how
they have been used.""" they have been used."""
@ -35,9 +35,5 @@ class PyMock(Package):
version('1.3.0', '73ee8a4afb3ff4da1b4afa287f39fdeb') version('1.3.0', '73ee8a4afb3ff4da1b4afa287f39fdeb')
extends('python')
depends_on('py-pbr', type=('build', 'run')) depends_on('py-pbr', type=('build', 'run'))
depends_on('py-setuptools@17.1:', type='build') depends_on('py-setuptools@17.1:', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyMonotonic(Package): class PyMonotonic(PythonPackage):
"""An implementation of time.monotonic() for Python 2 & < 3.3""" """An implementation of time.monotonic() for Python 2 & < 3.3"""
homepage = "https://pypi.python.org/pypi/monotonic" homepage = "https://pypi.python.org/pypi/monotonic"
@ -33,9 +33,4 @@ class PyMonotonic(Package):
version('1.2', 'd14c93aabc3d6af25ef086b032b123cf') version('1.2', 'd14c93aabc3d6af25ef086b032b123cf')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyMpi4py(Package): class PyMpi4py(PythonPackage):
"""This package provides Python bindings for the Message Passing """This package provides Python bindings for the Message Passing
Interface (MPI) standard. It is implemented on top of the Interface (MPI) standard. It is implemented on top of the
MPI-1/MPI-2 specification and exposes an API which grounds on the MPI-1/MPI-2 specification and exposes an API which grounds on the
@ -38,9 +38,5 @@ class PyMpi4py(Package):
version('2.0.0', '4f7d8126d7367c239fd67615680990e3') version('2.0.0', '4f7d8126d7367c239fd67615680990e3')
version('1.3.1', 'dbe9d22bdc8ed965c23a7ceb6f32fc3c') version('1.3.1', 'dbe9d22bdc8ed965c23a7ceb6f32fc3c')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('mpi') depends_on('mpi')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,14 +25,9 @@
from spack import * from spack import *
class PyMpmath(Package): class PyMpmath(PythonPackage):
"""A Python library for arbitrary-precision floating-point arithmetic.""" """A Python library for arbitrary-precision floating-point arithmetic."""
homepage = "http://mpmath.org" homepage = "http://mpmath.org"
url = "https://pypi.python.org/packages/source/m/mpmath/mpmath-all-0.19.tar.gz" url = "https://pypi.python.org/packages/source/m/mpmath/mpmath-all-0.19.tar.gz"
version('0.19', 'd1b7e19dd6830d0d7b5e1bc93d46c02c') version('0.19', 'd1b7e19dd6830d0d7b5e1bc93d46c02c')
extends('python')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyMx(Package): class PyMx(PythonPackage):
"""The eGenix.com mx Base Distribution for Python is a collection of """The eGenix.com mx Base Distribution for Python is a collection of
professional quality software tools which enhance Python's professional quality software tools which enhance Python's
usability in many important areas such as fast text searching, usability in many important areas such as fast text searching,
@ -36,8 +36,3 @@ class PyMx(Package):
url = "https://downloads.egenix.com/python/egenix-mx-base-3.2.8.tar.gz" url = "https://downloads.egenix.com/python/egenix-mx-base-3.2.8.tar.gz"
version('3.2.8', '9d9d3a25f9dc051a15e97f452413423b') version('3.2.8', '9d9d3a25f9dc051a15e97f452413423b')
extends('python')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,15 +25,14 @@
from spack import * from spack import *
class PyMysqldb1(Package): class PyMysqldb1(PythonPackage):
"""Legacy mysql bindings for python""" """Legacy mysql bindings for python"""
homepage = "https://github.com/farcepest/MySQLdb1" homepage = "https://github.com/farcepest/MySQLdb1"
url = "https://github.com/farcepest/MySQLdb1/archive/MySQLdb-1.2.5.tar.gz" url = "https://github.com/farcepest/MySQLdb1/archive/MySQLdb-1.2.5.tar.gz"
version('1.2.5', '332c8f4955b6bc0c79ea15170bf7321b') version('1.2.5', '332c8f4955b6bc0c79ea15170bf7321b',
url="https://github.com/farcepest/MySQLdb1/archive/MySQLdb-1.2.5.tar.gz")
# FIXME: Missing dependency on mysql
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,30 +25,31 @@
from spack import * from spack import *
class PyNbconvert(Package): class PyNbconvert(PythonPackage):
"""Jupyter Notebook Conversion""" """Jupyter Notebook Conversion"""
homepage = "https://github.com/jupyter/nbconvert" homepage = "https://github.com/jupyter/nbconvert"
url = "https://github.com/jupyter/nbconvert/archive/4.2.0.tar.gz" url = "https://github.com/jupyter/nbconvert/archive/4.2.0.tar.gz"
version('4.2.0' , '8bd88771cc00f575d5edcd0b5197f964') version('4.2.0', '8bd88771cc00f575d5edcd0b5197f964')
version('4.1.0' , '06655576713ba1ff7cece2b92760c187') version('4.1.0', '06655576713ba1ff7cece2b92760c187')
version('4.0.0' , '9661620b1e10a7b46f314588d2d0932f') version('4.0.0', '9661620b1e10a7b46f314588d2d0932f')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('py-pycurl', type='build') depends_on('py-pycurl', type='build')
depends_on('python@2.7:2.7.999,3.3:') depends_on('python@2.7:2.7.999,3.3:')
depends_on('py-mistune') depends_on('py-mistune', type=('build', 'run'))
depends_on('py-jinja2') depends_on('py-jinja2', type=('build', 'run'))
depends_on('py-pygments') depends_on('py-pygments', type=('build', 'run'))
depends_on('py-traitlets') depends_on('py-traitlets', type=('build', 'run'))
depends_on('py-jupyter-core') depends_on('py-jupyter-core', type=('build', 'run'))
depends_on('py-nbformat') depends_on('py-nbformat', type=('build', 'run'))
depends_on('py-entrypoints') depends_on('py-entrypoints', type=('build', 'run'))
depends_on('py-tornado') depends_on('py-tornado', type=('build', 'run'))
depends_on('py-jupyter-client') depends_on('py-jupyter-client', type=('build', 'run'))
def install(self, spec, prefix): # FIXME:
setup_py('install', '--prefix={0}'.format(prefix)) # Failed, try again after installing PycURL with `pip install pycurl` to avoid outdated SSL. # noqa
# Failed to download css from https://cdn.jupyter.org/notebook/4.1.0/style/style.min.css: [Errno socket error] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661) # noqa
# Downloading CSS: https://cdn.jupyter.org/notebook/4.1.0/style/style.min.css # noqa
# error: Need Notebook CSS to proceed: nbconvert/resources/style.min.css

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyNbformat(Package): class PyNbformat(PythonPackage):
"""The Jupyter Notebook format""" """The Jupyter Notebook format"""
homepage = "https://github.com/jupyter/nbformat" homepage = "https://github.com/jupyter/nbformat"
@ -35,13 +35,8 @@ class PyNbformat(Package):
version('4.0.1', 'ab7172e517c9d561c0c01eef5631b4c8') version('4.0.1', 'ab7172e517c9d561c0c01eef5631b4c8')
version('4.0.0', '7cf61359fa4e9cf3ef5e969e2fcb909e') version('4.0.0', '7cf61359fa4e9cf3ef5e969e2fcb909e')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('py-ipython-genutils') depends_on('py-ipython-genutils', type=('build', 'run'))
depends_on('py-traitlets') depends_on('py-traitlets', type=('build', 'run'))
depends_on('py-jsonschema') depends_on('py-jsonschema', type=('build', 'run'))
depends_on('py-jupyter-core') depends_on('py-jupyter-core', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyNestle(Package): class PyNestle(PythonPackage):
"""Nested sampling algorithms for evaluating Bayesian evidence.""" """Nested sampling algorithms for evaluating Bayesian evidence."""
homepage = "http://kbarbary.github.io/nestle/" homepage = "http://kbarbary.github.io/nestle/"
@ -34,11 +34,7 @@ class PyNestle(Package):
version('0.1.1', '4875c0f9a0a8e263c1d7f5fa6ce604c5') version('0.1.1', '4875c0f9a0a8e263c1d7f5fa6ce604c5')
# Required dependencies # Required dependencies
extends('python')
depends_on('py-numpy', type=('build', 'run')) depends_on('py-numpy', type=('build', 'run'))
# Optional dependencies # Optional dependencies
depends_on('py-scipy', type=('build', 'run')) depends_on('py-scipy', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,18 +25,14 @@
from spack import * from spack import *
class PyNetcdf(Package): class PyNetcdf(PythonPackage):
"""Python interface to the netCDF Library.""" """Python interface to the netCDF Library."""
homepage = "http://unidata.github.io/netcdf4-python" homepage = "http://unidata.github.io/netcdf4-python"
url = "https://github.com/Unidata/netcdf4-python/tarball/v1.2.3.1rel" url = "https://github.com/Unidata/netcdf4-python/tarball/v1.2.3.1rel"
version('1.2.3.1', '4fc4320d4f2a77b894ebf8da1c9895af') version('1.2.3.1', '4fc4320d4f2a77b894ebf8da1c9895af')
extends('python')
depends_on('py-numpy', type=('build', 'run')) depends_on('py-numpy', type=('build', 'run'))
depends_on('py-cython', type=('build', 'run')) depends_on('py-cython', type=('build', 'run'))
depends_on('py-setuptools', type=('build', 'run')) depends_on('py-setuptools', type=('build', 'run'))
depends_on('netcdf') depends_on('netcdf')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyNetworkx(Package): class PyNetworkx(PythonPackage):
"""NetworkX is a Python package for the creation, manipulation, and study """NetworkX is a Python package for the creation, manipulation, and study
of the structure, dynamics, and functions of complex networks.""" of the structure, dynamics, and functions of complex networks."""
homepage = "http://networkx.github.io/" homepage = "http://networkx.github.io/"
@ -33,10 +33,5 @@ class PyNetworkx(Package):
version('1.11', '6ef584a879e9163013e9a762e1cf7cd1') version('1.11', '6ef584a879e9163013e9a762e1cf7cd1')
extends('python')
depends_on('py-decorator', type=('build', 'run')) depends_on('py-decorator', type=('build', 'run'))
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyNose(Package): class PyNose(PythonPackage):
"""nose extends the test loading and running features of unittest, """nose extends the test loading and running features of unittest,
making it easier to write, find and run tests.""" making it easier to write, find and run tests."""
@ -36,8 +36,4 @@ class PyNose(Package):
version('1.3.6', '0ca546d81ca8309080fc80cb389e7a16') version('1.3.6', '0ca546d81ca8309080fc80cb389e7a16')
version('1.3.7', '4d3ad0ff07b61373d2cefc89c5d0b20b') version('1.3.7', '4d3ad0ff07b61373d2cefc89c5d0b20b')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,16 +25,16 @@
from spack import * from spack import *
class PyNumexpr(Package): class PyNumexpr(PythonPackage):
"""Fast numerical expression evaluator for NumPy""" """Fast numerical expression evaluator for NumPy"""
homepage = "https://pypi.python.org/pypi/numexpr" homepage = "https://pypi.python.org/pypi/numexpr"
url = "https://pypi.python.org/packages/source/n/numexpr/numexpr-2.4.6.tar.gz" url = "https://pypi.python.org/packages/source/n/numexpr/numexpr-2.4.6.tar.gz"
version('2.6.1', '6365245705b446426df9543ad218dd8e',
url="https://pypi.python.org/packages/c6/f0/11628fa4d332d8fe9ab0ba8e9bfe0e065fb6b5324859171ee72d84e079c0/numexpr-2.6.1.tar.gz")
version('2.5', '84f66cced45ba3e30dcf77a937763aaa')
version('2.4.6', '17ac6fafc9ea1ce3eb970b9abccb4fbd') version('2.4.6', '17ac6fafc9ea1ce3eb970b9abccb4fbd')
version('2.5', '84f66cced45ba3e30dcf77a937763aaa')
extends('python') depends_on('python@2.6:')
depends_on('py-numpy', type=('build', 'run')) depends_on('py-numpy@1.6:', type=('build', 'run'))
depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -26,7 +26,7 @@
import platform import platform
class PyNumpy(Package): class PyNumpy(PythonPackage):
"""NumPy is the fundamental package for scientific computing with Python. """NumPy is the fundamental package for scientific computing with Python.
It contains among other things: a powerful N-dimensional array object, It contains among other things: a powerful N-dimensional array object,
sophisticated (broadcasting) functions, tools for integrating C/C++ and sophisticated (broadcasting) functions, tools for integrating C/C++ and
@ -46,7 +46,6 @@ class PyNumpy(Package):
variant('blas', default=True) variant('blas', default=True)
variant('lapack', default=True) variant('lapack', default=True)
extends('python')
depends_on('python@2.6:2.8,3.2:') depends_on('python@2.6:2.8,3.2:')
depends_on('py-nose', type='build') depends_on('py-nose', type='build')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
@ -65,7 +64,8 @@ def setup_dependent_package(self, module, dep_spec):
self.spec.version, python_version, arch), self.spec.version, python_version, arch),
'numpy/core/include') 'numpy/core/include')
def install(self, spec, prefix): def patch(self):
spec = self.spec
# for build notes see http://www.scipy.org/scipylib/building/linux.html # for build notes see http://www.scipy.org/scipylib/building/linux.html
lapackblas = LibraryList('') lapackblas = LibraryList('')
if '+lapack' in spec: if '+lapack' in spec:
@ -82,5 +82,3 @@ def install(self, spec, prefix):
if not ((platform.system() == "Darwin") and if not ((platform.system() == "Darwin") and
(platform.mac_ver()[0] == '10.12')): (platform.mac_ver()[0] == '10.12')):
f.write('rpath=%s\n' % ':'.join(lapackblas.directories)) f.write('rpath=%s\n' % ':'.join(lapackblas.directories))
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyOpenpyxl(Package): class PyOpenpyxl(PythonPackage):
"""A Python library to read/write Excel 2007 xlsx/xlsm files""" """A Python library to read/write Excel 2007 xlsx/xlsm files"""
homepage = 'http://openpyxl.readthedocs.org/' homepage = 'http://openpyxl.readthedocs.org/'
@ -33,10 +33,5 @@ class PyOpenpyxl(Package):
version('2.4.0-a1', 'e5ca6d23ceccb15115d45cdf26e736fc') version('2.4.0-a1', 'e5ca6d23ceccb15115d45cdf26e736fc')
extends('python')
depends_on('py-jdcal', type=('build', 'run')) depends_on('py-jdcal', type=('build', 'run'))
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyOrdereddict(Package): class PyOrdereddict(PythonPackage):
"""A drop-in substitute for Py2.7's new collections. """A drop-in substitute for Py2.7's new collections.
OrderedDict that works in Python 2.4-2.6.""" OrderedDict that works in Python 2.4-2.6."""
@ -33,9 +33,3 @@ class PyOrdereddict(Package):
url = "https://pypi.python.org/packages/source/o/ordereddict/ordereddict-1.1.tar.gz" url = "https://pypi.python.org/packages/source/o/ordereddict/ordereddict-1.1.tar.gz"
version('1.1', 'a0ed854ee442051b249bfad0f638bbec') version('1.1', 'a0ed854ee442051b249bfad0f638bbec')
extends('python')
depends_on('python@2.4:2.6.999')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyPandas(Package): class PyPandas(PythonPackage):
"""pandas is a Python package providing fast, flexible, and expressive """pandas is a Python package providing fast, flexible, and expressive
data structures designed to make working with relational or data structures designed to make working with relational or
labeled data both easy and intuitive. It aims to be the labeled data both easy and intuitive. It aims to be the
@ -42,13 +42,9 @@ class PyPandas(Package):
version('0.16.1', 'fac4f25748f9610a3e00e765474bdea8') version('0.16.1', 'fac4f25748f9610a3e00e765474bdea8')
version('0.18.0', 'f143762cd7a59815e348adf4308d2cf6') version('0.18.0', 'f143762cd7a59815e348adf4308d2cf6')
extends('python')
depends_on('py-dateutil', type=('build', 'run')) depends_on('py-dateutil', type=('build', 'run'))
depends_on('py-numpy', type=('build', 'run')) depends_on('py-numpy', type=('build', 'run'))
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('py-pytz', type=('build', 'run')) depends_on('py-pytz', type=('build', 'run'))
depends_on('py-numexpr', type=('build', 'run')) depends_on('py-numexpr', type=('build', 'run'))
depends_on('py-bottleneck', type=('build', 'run')) depends_on('py-bottleneck', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyPathlib2(Package): class PyPathlib2(PythonPackage):
"""Backport of pathlib from python 3.4""" """Backport of pathlib from python 3.4"""
homepage = "https://pypi.python.org/pypi/pathlib2" homepage = "https://pypi.python.org/pypi/pathlib2"
@ -33,10 +33,5 @@ class PyPathlib2(Package):
version('2.1.0', '38e4f58b4d69dfcb9edb49a54a8b28d2') version('2.1.0', '38e4f58b4d69dfcb9edb49a54a8b28d2')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('python@:3.3.999') depends_on('python@:3.3.999')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyPathspec(Package): class PyPathspec(PythonPackage):
"""pathspec extends the test loading and running features of unittest, """pathspec extends the test loading and running features of unittest,
making it easier to write, find and run tests.""" making it easier to write, find and run tests."""
@ -34,8 +34,4 @@ class PyPathspec(Package):
version('0.3.4', '2a4af9bf2dee98845d583ec61a00d05d', version('0.3.4', '2a4af9bf2dee98845d583ec61a00d05d',
url='https://pypi.python.org/packages/14/9d/c9d790d373d6f6938d793e9c549b87ad8670b6fa7fc6176485e6ef11c1a4/pathspec-0.3.4.tar.gz') url='https://pypi.python.org/packages/14/9d/c9d790d373d6f6938d793e9c549b87ad8670b6fa7fc6176485e6ef11c1a4/pathspec-0.3.4.tar.gz')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyPbr(Package): class PyPbr(PythonPackage):
"""PBR is a library that injects some useful and sensible default """PBR is a library that injects some useful and sensible default
behaviors into your setuptools run.""" behaviors into your setuptools run."""
homepage = "https://pypi.python.org/pypi/pbr" homepage = "https://pypi.python.org/pypi/pbr"
@ -33,9 +33,4 @@ class PyPbr(Package):
version('1.8.1', 'c8f9285e1a4ca6f9654c529b158baa3a') version('1.8.1', 'c8f9285e1a4ca6f9654c529b158baa3a')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyPeriodictable(Package): class PyPeriodictable(PythonPackage):
"""nose extends the test loading and running features of unittest, """nose extends the test loading and running features of unittest,
making it easier to write, find and run tests.""" making it easier to write, find and run tests."""
@ -36,7 +36,3 @@ class PyPeriodictable(Package):
depends_on('py-numpy', type=('build', 'run')) depends_on('py-numpy', type=('build', 'run'))
depends_on('py-pyparsing', type=('build', 'run')) depends_on('py-pyparsing', type=('build', 'run'))
extends('python')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,16 +25,12 @@
from spack import * from spack import *
class PyPexpect(Package): class PyPexpect(PythonPackage):
"""Pexpect allows easy control of interactive console applications.""" """Pexpect allows easy control of interactive console applications."""
homepage = "https://pypi.python.org/pypi/pexpect" homepage = "https://pypi.python.org/pypi/pexpect"
url = "https://pypi.io/packages/source/p/pexpect/pexpect-4.2.1.tar.gz" url = "https://pypi.io/packages/source/p/pexpect/pexpect-4.2.1.tar.gz"
version('4.2.1', '3694410001a99dff83f0b500a1ca1c95') version('4.2.1', '3694410001a99dff83f0b500a1ca1c95')
version('3.3', '0de72541d3f1374b795472fed841dce8')
extends('python') depends_on('py-ptyprocess', type=('build', 'run'))
depends_on('py-ptyprocess')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyPhonopy(Package): class PyPhonopy(PythonPackage):
"""Phonopy is an open source package for phonon """Phonopy is an open source package for phonon
calculations at harmonic and quasi-harmonic levels.""" calculations at harmonic and quasi-harmonic levels."""
homepage = "http://atztogo.github.io/phonopy/index.html" homepage = "http://atztogo.github.io/phonopy/index.html"
@ -33,11 +33,7 @@ class PyPhonopy(Package):
version('1.10.0', '973ed1bcea46e21b9bf747aab9061ff6') version('1.10.0', '973ed1bcea46e21b9bf747aab9061ff6')
extends('python')
depends_on('py-numpy', type=('build', 'run')) depends_on('py-numpy', type=('build', 'run'))
depends_on('py-scipy', type=('build', 'run')) depends_on('py-scipy', type=('build', 'run'))
depends_on('py-matplotlib', type=('build', 'run')) depends_on('py-matplotlib', type=('build', 'run'))
depends_on('py-pyyaml', type=('build', 'run')) depends_on('py-pyyaml', type=('build', 'run'))
def install(self, spec, prefix):
setup_py('install', '--home=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyPickleshare(Package): class PyPickleshare(PythonPackage):
"""Tiny 'shelve'-like database with concurrency support""" """Tiny 'shelve'-like database with concurrency support"""
homepage = "https://pypi.python.org/pypi/pickleshare" homepage = "https://pypi.python.org/pypi/pickleshare"
@ -33,9 +33,4 @@ class PyPickleshare(Package):
version('0.7.4', '6a9e5dd8dfc023031f6b7b3f824cab12') version('0.7.4', '6a9e5dd8dfc023031f6b7b3f824cab12')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyPil(Package): class PyPil(PythonPackage):
"""The Python Imaging Library (PIL) adds image processing capabilities """The Python Imaging Library (PIL) adds image processing capabilities
to your Python interpreter. This library supports many file formats, to your Python interpreter. This library supports many file formats,
and provides powerful image processing and graphics capabilities.""" and provides powerful image processing and graphics capabilities."""
@ -39,8 +39,4 @@ class PyPil(Package):
# py-pil currently only works with Python2. # py-pil currently only works with Python2.
# If you are using Python 3, try using py-pillow instead. # If you are using Python 3, try using py-pillow instead.
extends('python')
depends_on('python@1.5.2:2.8') depends_on('python@1.5.2:2.8')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -23,9 +23,10 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
############################################################################## ##############################################################################
from spack import * from spack import *
import sys
class PyPillow(Package): class PyPillow(PythonPackage):
"""Pillow is a fork of the Python Imaging Library (PIL). It adds image """Pillow is a fork of the Python Imaging Library (PIL). It adds image
processing capabilities to your Python interpreter. This library supports processing capabilities to your Python interpreter. This library supports
many file formats, and provides powerful image processing and graphics many file formats, and provides powerful image processing and graphics
@ -64,8 +65,7 @@ class PyPillow(Package):
# description='Provide improved color quantization') # description='Provide improved color quantization')
# Required dependencies # Required dependencies
extends('python') depends_on('binutils', type='build', when=sys.platform != 'darwin')
depends_on('binutils', type='build')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
# Recommended dependencies # Recommended dependencies
@ -83,6 +83,8 @@ class PyPillow(Package):
# depends_on('webpmux', when='+webpmux') # depends_on('webpmux', when='+webpmux')
# depends_on('imagequant', when='+imagequant') # depends_on('imagequant', when='+imagequant')
phases = ['build_ext', 'install']
def patch(self): def patch(self):
"""Patch setup.py to provide lib and include directories """Patch setup.py to provide lib and include directories
for dependencies.""" for dependencies."""
@ -121,13 +123,10 @@ def patch(self):
spec['openjpeg'].prefix.lib, spec['openjpeg'].prefix.lib,
spec['openjpeg'].prefix.include)) spec['openjpeg'].prefix.include))
def install(self, spec, prefix): def build_ext_args(self, spec, prefix):
def variant_to_flag(variant): def variant_to_flag(variant):
able = 'enable' if '+{0}'.format(variant) in spec else 'disable' able = 'enable' if '+{0}'.format(variant) in spec else 'disable'
return '--{0}-{1}'.format(able, variant) return '--{0}-{1}'.format(able, variant)
variants = ['jpeg', 'zlib', 'tiff', 'freetype', 'lcms', 'jpeg2000'] variants = ['jpeg', 'zlib', 'tiff', 'freetype', 'lcms', 'jpeg2000']
build_args = list(map(variant_to_flag, variants)) return list(map(variant_to_flag, variants))
setup_py('build_ext', *build_args)
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyPip(Package): class PyPip(PythonPackage):
"""The PyPA recommended tool for installing Python packages.""" """The PyPA recommended tool for installing Python packages."""
homepage = "https://pypi.python.org/pypi/pip" homepage = "https://pypi.python.org/pypi/pip"
@ -33,9 +33,4 @@ class PyPip(Package):
version('9.0.1', '35f01da33009719497f01a4ba69d63c9') version('9.0.1', '35f01da33009719497f01a4ba69d63c9')
extends('python')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix={0}'.format(prefix))

View File

@ -25,14 +25,9 @@
from spack import * from spack import *
class PyPly(Package): class PyPly(PythonPackage):
"""PLY is nothing more than a straightforward lex/yacc implementation.""" """PLY is nothing more than a straightforward lex/yacc implementation."""
homepage = "http://www.dabeaz.com/ply" homepage = "http://www.dabeaz.com/ply"
url = "http://www.dabeaz.com/ply/ply-3.8.tar.gz" url = "http://www.dabeaz.com/ply/ply-3.8.tar.gz"
version('3.8', '94726411496c52c87c2b9429b12d5c50') version('3.8', '94726411496c52c87c2b9429b12d5c50')
extends('python')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,15 +25,10 @@
from spack import * from spack import *
class PyPmw(Package): class PyPmw(PythonPackage):
"""Pmw is a toolkit for building high-level compound widgets, or """Pmw is a toolkit for building high-level compound widgets, or
megawidgets, constructed using other widgets as component parts.""" megawidgets, constructed using other widgets as component parts."""
homepage = "https://pypi.python.org/pypi/Pmw" homepage = "https://pypi.python.org/pypi/Pmw"
url = "https://pypi.python.org/packages/source/P/Pmw/Pmw-2.0.0.tar.gz" url = "https://pypi.python.org/packages/source/P/Pmw/Pmw-2.0.0.tar.gz"
version('2.0.0', 'c7c3f26c4f5abaa99807edefee578fc0') version('2.0.0', 'c7c3f26c4f5abaa99807edefee578fc0')
extends('python')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

View File

@ -25,7 +25,7 @@
from spack import * from spack import *
class PyPrettytable(Package): class PyPrettytable(PythonPackage):
"""PrettyTable is a simple Python library designed to make """PrettyTable is a simple Python library designed to make
it quick and easy to represent tabular data in visually it quick and easy to represent tabular data in visually
appealing ASCII tables. appealing ASCII tables.
@ -36,8 +36,4 @@ class PyPrettytable(Package):
version('0.7.2', 'a6b80afeef286ce66733d54a0296b13b') version('0.7.2', 'a6b80afeef286ce66733d54a0296b13b')
extends("python")
depends_on("py-setuptools", type='build') depends_on("py-setuptools", type='build')
def install(self, spec, prefix):
setup_py('install', '--prefix=%s' % prefix)

Some files were not shown because too many files have changed in this diff Show More