From 45f3b2fc52361aef7374f867999df75e3d534f7f Mon Sep 17 00:00:00 2001 From: Andrew W Elble Date: Fri, 18 Feb 2022 15:18:11 -0500 Subject: py-keras: new versions (#27991) * py-keras: new versions * incorporate feedback * adjust deps, add url_for_version() * change to use pip * remove build phase / remove unnecessary TEST_TMPDIR envvar * switch url_for_version around install, not build --- .../repos/builtin/packages/py-keras/package.py | 89 ++++++++++++++++++++-- .../builtin/packages/py-keras/protobuf_build.patch | 26 +++++++ 2 files changed, 107 insertions(+), 8 deletions(-) create mode 100644 var/spack/repos/builtin/packages/py-keras/protobuf_build.patch (limited to 'var') diff --git a/var/spack/repos/builtin/packages/py-keras/package.py b/var/spack/repos/builtin/packages/py-keras/package.py index c6fca7d64c..81c9d3c9e5 100644 --- a/var/spack/repos/builtin/packages/py-keras/package.py +++ b/var/spack/repos/builtin/packages/py-keras/package.py @@ -3,6 +3,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import tempfile + from spack import * @@ -11,8 +13,12 @@ class PyKeras(PythonPackage): and more. Runs on Theano or TensorFlow.""" homepage = "https://keras.io" - pypi = "Keras/Keras-1.2.2.tar.gz" + git = "https://github.com/keras-team/keras" + url = 'https://github.com/keras-team/keras/archive/refs/tags/v2.7.0.tar.gz' + version('2.7.0', sha256='7502746467ab15184e2e267f13fbb2c3f33ba24f8e02a097d229ba376dabaa04') + version('2.6.0', sha256='15586a3f3e1ed9182e6e0d4c0dbd052dfb7250e779ceb7e24f8839db5c63fcae') + version('2.5.0', commit='9c266106163390f173625c4e7b1ccb03ae145ffc') version('2.4.3', sha256='fedd729b52572fb108a98e3d97e1bac10a81d3917d2103cc20ab2a5f03beb973') version('2.2.4', sha256='90b610a3dbbf6d257b20a079eba3fdf2eed2158f64066a7c6f7227023fd60bc9') version('2.2.3', sha256='694aee60a6f8e0d3d6d3e4967e063b4623e3ca90032f023fd6d16bb5f81d18de') @@ -40,13 +46,80 @@ class PyKeras(PythonPackage): version('1.1.1', sha256='be1b67f62e5119f6f24a239a865dc47e6d9aa93b97b506ba34cab7353dbc23b6') version('1.1.0', sha256='36d83b027ba9d2c9da8e1eefc28f600ca93dc03423e033b633cbac9061af8a5d') - depends_on('python@3.6:', type=('build', 'run'), when='@2.4:') - depends_on('py-numpy@1.9.1:', type=('build', 'run'), when='@2.4:') - depends_on('py-scipy@0.14:', type=('build', 'run'), when='@2.4:') - depends_on('py-h5py', type=('build', 'run'), when='@2.4:') - depends_on('py-keras-applications', type='run', when='@2.2') - depends_on('py-keras-preprocessing', type='run', when='@2.2') + depends_on('python@3.6:', type=('build', 'run'), when='@2.4') + depends_on('py-numpy@1.9.1:', type=('build', 'run'), when='@2.4') + depends_on('py-scipy@0.14:', type=('build', 'run'), when='@2.4') + depends_on('py-h5py', type=('build', 'run'), when='@2.4') + depends_on('py-keras-applications', type='run', when='@2.2:2.4') + depends_on('py-keras-preprocessing', type='run', when='@2.2:2.4') depends_on('py-setuptools', type='build') depends_on('py-theano', type=('build', 'run'), when='@:2.2') - depends_on('py-pyyaml', type=('build', 'run')) + depends_on('py-pyyaml', type=('build', 'run'), when='@:2.4') depends_on('py-six', type=('build', 'run'), when='@:2.2') + depends_on('py-tensorflow@2.5.0:2.5', type=('build', 'run'), when='@2.5.0:2.5') + depends_on('py-tensorflow@2.6.0:2.6', type=('build', 'run'), when='@2.6.0:2.6') + depends_on('py-tensorflow@2.7.0:2.7', type=('build', 'run'), when='@2.7.0:2.7') + depends_on('bazel', type='build', when='@2.5.0:') + depends_on('protobuf', type='build', when='@2.5.0:') + + def url_for_version(self, version): + if version >= Version('2.6.0'): + return super(PyKeras, self).url_for_version(version) + else: + url = 'https://pypi.io/packages/source/K/Keras/Keras-{0}.tar.gz' + return url.format(version.dotted) + + @when('@2.5.0:') + def patch(self): + infile = join_path(self.package_dir, 'protobuf_build.patch') + with open(infile, 'r') as source_file: + text = source_file.read() + with open('keras/keras.bzl', mode='a') as f: + f.write(text) + + filter_file('load("@com_google_protobuf//:protobuf.bzl", "py_proto_library")', + 'load("@org_keras//keras:keras.bzl", "py_proto_library")', + 'keras/protobuf/BUILD', + string=True) + + @when('@2.5.0:') + def install(self, spec, prefix): + self.tmp_path = tempfile.mkdtemp(dir='/tmp', prefix='spack') + env['HOME'] = self.tmp_path + + args = [ + # Don't allow user or system .bazelrc to override build settings + '--nohome_rc', + '--nosystem_rc', + # Bazel does not work properly on NFS, switch to /tmp + '--output_user_root=' + self.tmp_path, + 'build', + # Spack logs don't handle colored output well + '--color=no', + '--jobs={0}'.format(make_jobs), + # Enable verbose output for failures + '--verbose_failures', + # Show (formatted) subcommands being executed + '--subcommands=pretty_print', + '--spawn_strategy=local', + # Ask bazel to explain what it's up to + # Needs a filename as argument + '--explain=explainlogfile.txt', + # Increase verbosity of explanation, + '--verbose_explanations', + # bazel uses system PYTHONPATH instead of spack paths + '--action_env', 'PYTHONPATH={0}'.format(env['PYTHONPATH']), + '//keras/tools/pip_package:build_pip_package', + ] + + bazel(*args) + + build_pip_package = Executable( + 'bazel-bin/keras/tools/pip_package/build_pip_package') + buildpath = join_path(self.stage.source_path, 'spack-build') + build_pip_package('--src', buildpath) + + with working_dir(buildpath): + args = std_pip_args + ['--prefix=' + prefix, '.'] + pip(*args) + remove_linked_tree(self.tmp_path) diff --git a/var/spack/repos/builtin/packages/py-keras/protobuf_build.patch b/var/spack/repos/builtin/packages/py-keras/protobuf_build.patch new file mode 100644 index 0000000000..527efbb7b9 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-keras/protobuf_build.patch @@ -0,0 +1,26 @@ +def py_proto_library( + name, + srcs = [], + deps = [], + py_libs = [], + py_extra_srcs = [], + include = None, + use_grpc_plugin = False, + **kargs): + + outs = [s[:-len(".proto")] + "_pb2.py" for s in srcs] + + native.genrule( + name = name + "_protoc_gen", + outs = outs, + srcs = srcs, + cmd = "protoc --python_out=$(GENDIR) -I. $<", + ) + + native.py_library( + name = name, + srcs = outs + py_extra_srcs, + deps = py_libs + deps, + imports = [], + **kargs + ) -- cgit v1.2.3-60-g2f50