From 650d8c93a16333e9390db0269327bd2d47f02fc7 Mon Sep 17 00:00:00 2001 From: Nikolay Amiantov Date: Thu, 15 Mar 2018 03:08:06 +0300 Subject: [PATCH] tensorflow: add a binary wheel release for Darwin --- .../python-modules/tensorflow/bin.nix | 51 +++++++++++++++++++ .../python-modules/tensorflow/default.nix | 2 +- pkgs/top-level/python-packages.nix | 15 +++--- 3 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 pkgs/development/python-modules/tensorflow/bin.nix diff --git a/pkgs/development/python-modules/tensorflow/bin.nix b/pkgs/development/python-modules/tensorflow/bin.nix new file mode 100644 index 00000000000..c9b89ff7616 --- /dev/null +++ b/pkgs/development/python-modules/tensorflow/bin.nix @@ -0,0 +1,51 @@ +{ stdenv +, lib +, fetchurl +, buildPythonPackage +, isPy3k, isPy36, pythonOlder +, numpy +, six +, protobuf +, absl-py +, mock +, backports_weakref +, enum34 +, tensorflow-tensorboard +, cudaSupport ? false +}: + +# tensorflow is built from a downloaded wheel because the source +# build doesn't yet work on Darwin. + +buildPythonPackage rec { + pname = "tensorflow"; + version = "1.5.0"; + format = "wheel"; + + src = fetchurl { + url = "https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-${version}-py3-none-any.whl"; + sha256 = "1mapv45n9wmgcq3i3im0pv0gmhwkxw5z69nsnxb1gfxbj1mz5h9m"; + }; + + propagatedBuildInputs = [ numpy six protobuf absl-py ] + ++ lib.optional (!isPy3k) mock + ++ lib.optionals (pythonOlder "3.4") [ backports_weakref enum34 ] + ++ lib.optional (pythonOlder "3.6") tensorflow-tensorboard; + + # tensorflow depends on tensorflow_tensorboard, which cannot be + # built at the moment (some of its dependencies do not build + # [htlm5lib9999999 (seven nines) -> tensorboard], and it depends on an old version of + # bleach) Hence we disable dependency checking for now. + installFlags = lib.optional isPy36 "--no-dependencies"; + + meta = with stdenv.lib; { + description = "Computation using data flow graphs for scalable machine learning"; + homepage = http://tensorflow.org; + license = licenses.asl20; + maintainers = with maintainers; [ jyp abbradar ]; + platforms = platforms.darwin; + # Python 2.7 build uses different string encoding. + # See https://github.com/NixOS/nixpkgs/pull/37044#issuecomment-373452253 + broken = cudaSupport || !isPy3k; + }; +} diff --git a/pkgs/development/python-modules/tensorflow/default.nix b/pkgs/development/python-modules/tensorflow/default.nix index 85dd30118cc..8d2d6fa9c14 100644 --- a/pkgs/development/python-modules/tensorflow/default.nix +++ b/pkgs/development/python-modules/tensorflow/default.nix @@ -149,7 +149,7 @@ in buildPythonPackage rec { homepage = http://tensorflow.org; license = licenses.asl20; maintainers = with maintainers; [ jyp abbradar ]; - platforms = with platforms; if cudaSupport then linux else linux ++ darwin; + platforms = platforms.linux; broken = !(xlaSupport -> cudaSupport); }; } diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 7d45b392792..27928b76d0d 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -19779,12 +19779,15 @@ EOF tensorflow-tensorboard = callPackage ../development/python-modules/tensorflow-tensorboard { }; - tensorflow = callPackage ../development/python-modules/tensorflow rec { - cudaSupport = pkgs.config.cudaSupport or false; - inherit (pkgs.linuxPackages) nvidia_x11; - cudatoolkit = pkgs.cudatoolkit9; - cudnn = pkgs.cudnn_cudatoolkit9; - }; + tensorflow = + if stdenv.isDarwin + then callPackage ../development/python-modules/tensorflow/bin.nix { } + else callPackage ../development/python-modules/tensorflow rec { + cudaSupport = pkgs.config.cudaSupport or false; + inherit (pkgs.linuxPackages) nvidia_x11; + cudatoolkit = pkgs.cudatoolkit9; + cudnn = pkgs.cudnn_cudatoolkit9; + }; tensorflowWithoutCuda = self.tensorflow.override { cudaSupport = false;