nixpkgs/pkgs/development/python-modules/dm-sonnet/default.nix
Matthew Bauer 2a8d05627b build-bazel-package: switch hash mode to “flat”
flat hashes can be substituted through hashed-mirrors, while recursive
hashes can’t. This is especially important for Bazel since the bazel
fetch dependencies can come from multiple different methods (git,
http, ftp, etc.). To do this, we create tar archives from the
output/external directory, which is then extracted to build. All of
the Bazel hashes are all updated.
2020-05-09 13:33:26 -05:00

93 lines
2.1 KiB
Nix

{ lib
, fetchFromGitHub
, buildBazelPackage
, buildPythonPackage
, git
, python
, six
, absl-py
, semantic-version
, contextlib2
, wrapt
, tensorflow
, tensorflow-probability
, tensorflow-estimator
}:
let
version = "1.33";
# first build all binaries and generate setup.py using bazel
bazel-build = buildBazelPackage {
name = "dm-sonnet-bazel-${version}";
src = fetchFromGitHub {
owner = "deepmind";
repo = "sonnet";
rev = "v${version}";
sha256 = "1nqsja1s8jrkq6v1whgh7smk17313mjr9vs3k5c1m8px4yblzhqc";
};
nativeBuildInputs = [
git # needed to fetch the bazel deps (protobuf in particular)
];
# see https://github.com/deepmind/sonnet/blob/master/docs/INSTALL.md
bazelTarget = ":install";
fetchAttrs = {
sha256 = "0jlgmwcanfkhkwvh4vxibpi0zyyl6xkjzcz2xqn7raympqscq81a";
};
bazelFlags = [
# https://github.com/deepmind/sonnet/issues/134
"--incompatible_disable_deprecated_attr_params=false"
];
buildAttrs = {
preBuild = ''
patchShebangs .
'';
installPhase = ''
# do not generate a wheel, instead just copy the generated files to $out to be installed by buildPythonPackage
sed -i 's,.*bdist_wheel.*,cp -rL . "$out"; exit 0,' bazel-bin/install
# the target directory "dist" does not actually matter since we're not generating a wheel
bazel-bin/install dist
'';
};
};
# now use pip to install the package prepared by bazel
in buildPythonPackage {
pname = "dm-sonnet";
inherit version;
src = bazel-build;
propagatedBuildInputs = [
six
absl-py
semantic-version
contextlib2
wrapt
tensorflow
tensorflow-probability
tensorflow-estimator
];
# not sure how to properly run the real test suite -- through bazel?
checkPhase = ''
${python.interpreter} -c "import sonnet"
'';
meta = with lib; {
description = "TensorFlow-based neural network library";
homepage = "https://sonnet.dev";
license = licenses.asl20;
maintainers = with maintainers; [ timokau ];
platforms = platforms.linux;
};
}