Noisemaker: Difference between revisions

From NixOS Wiki
imported>Raboof
document how to build noisemaker
 
imported>Raboof
how to use shell.nix instead of venv with a nixpkgs that has a recent tensorflow
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
https://noisemaker.readthedocs.io/en/latest/
https://noisemaker.readthedocs.io/en/latest/


At the time of writing noisemaker is still on tensorflow 1.3, which isn't available for python 3.7 (only up to 3.6, https://pypi.org/project/tensorflow/1.3.0/#files). Let's just use tensorflow 2 instead (https://github.com/aayars/py-noisemaker/pull/4):
Right now nixpkgs contains tensorflow 2.1.0 but has it disabled for python 3.8 (as it's not officially supported upstream either).  


    git clone git@github.com:aayars/py-noisemaker py-noisemaker
== with tensorflow 2.3.0 from a branch ==
    cd py-noisemaker
    hub remote add raboof
    git fetch raboof
    git checkout tensorflow2


Right now nixpkgs contains tensorflow 2.1.0 but has it disabled for python 3.8 (as it's not officially supported upstream either). 'python3 -m venv venv' doesn't seem to work with python 3.7, so I'm sticking with 3.8.
Using nixpkgs from https://github.com/NixOS/nixpkgs/pull/95824 , you can update setup.py to change '==' versions to '>=' for the dependencies for which NixOS is shipping newer versions, and then use the following shell.nix:
 
<syntaxHighlight lang=nix>
with import <nixpkgs> {};
with python3Packages;
 
buildPythonPackage rec {
  name = "noisemaker";
  src = /path/to/py-noisemaker;
  propagatedBuildInputs = [
    virtualenv
    pillow
    tensorflow_2
    click
  ];
}
</syntaxHighlight>
 
== with tensorflow 2.3.0 from pip in a venv ==
 
'python3 -m venv venv' doesn't seem to work with python 3.7, so I'm sticking with 3.8.


noisemaker wants exactly version 6.2.0 of Pillow. The pillow in nixpkgs is a different version, so this will be fetched and built with setup.py. To make sure it can correctly find the C libraries it uses, we use fshUserEnv and add some development headers:
noisemaker wants exactly version 6.2.0 of Pillow. The pillow in nixpkgs is a different version, so this will be fetched and built with setup.py. To make sure it can correctly find the C libraries it uses, we use fshUserEnv and add some development headers:


<syntaxHighlight lang=nix>
     { pkgs ? import <nixpkgs> {} }:
     { pkgs ? import <nixpkgs> {} }:
      
      
Line 29: Line 46:
       ];
       ];
     }).env
     }).env
 
</syntaxHighlight>


Then create noisemaker in a venv:
Then create noisemaker in a venv:


    python3 -m venv venv
<syntaxHighlight lang=console>
    source venv/bin/activate
$ python3 -m venv venv
    python3 setup.py develop
$ source venv/bin/activate
$ python3 setup.py develop
</syntaxHighlight>


Add a newer tensorflow from pip:
Add a newer tensorflow from pip:


    pip install tensorflow
<syntaxHighlight lang=console>
$ pip install tensorflow
</syntaxHighlight>


And run noisemaker:
And run noisemaker:


    noisemaker
<syntaxHighlight lang=console>
$ noisemaker
</syntaxHighlight>


(this will generate 'noise.png')
(this will generate 'noise.png')
## Next steps
It'd be nice to package noisemaker more 'nix natively'. Looking into installing tensorflow from nix instead of pip.

Latest revision as of 20:51, 21 August 2020

https://noisemaker.readthedocs.io/en/latest/

Right now nixpkgs contains tensorflow 2.1.0 but has it disabled for python 3.8 (as it's not officially supported upstream either).

with tensorflow 2.3.0 from a branch

Using nixpkgs from https://github.com/NixOS/nixpkgs/pull/95824 , you can update setup.py to change '==' versions to '>=' for the dependencies for which NixOS is shipping newer versions, and then use the following shell.nix:

with import <nixpkgs> {};
with python3Packages;

buildPythonPackage rec {
  name = "noisemaker";
  src = /path/to/py-noisemaker;
  propagatedBuildInputs = [
    virtualenv
    pillow
    tensorflow_2
    click
  ];
}

with tensorflow 2.3.0 from pip in a venv

'python3 -m venv venv' doesn't seem to work with python 3.7, so I'm sticking with 3.8.

noisemaker wants exactly version 6.2.0 of Pillow. The pillow in nixpkgs is a different version, so this will be fetched and built with setup.py. To make sure it can correctly find the C libraries it uses, we use fshUserEnv and add some development headers:

    { pkgs ? import <nixpkgs> {} }:
    
    let
      my-python-packages = python-packages: with python-packages; [
      ];
    in
    (pkgs.buildFHSUserEnv {
      name = "noisemaker";

      targetPkgs = pkgs: [
        (pkgs.python3.withPackages my-python-packages)
        pkgs.zlib.dev
        pkgs.libjpeg.dev
        pkgs.gcc
      ];
    }).env

Then create noisemaker in a venv:

 $ python3 -m venv venv
 $ source venv/bin/activate
 $ python3 setup.py develop

Add a newer tensorflow from pip:

$ pip install tensorflow

And run noisemaker:

$ noisemaker

(this will generate 'noise.png')