2017-10-03 5 views
0

Je suis en train d'empaqueter une application python pour Nix, mais je trouve que la majorité de la documentation suppose que je veux empaqueter une bibliothèque. Pour ce faire, j'ai regardé l'exemple de Rednotebook (pas pour une raison particulière autre que je savais qu'il était écrit en python), qui peut être trouvé dans python-packages, mais comme ce fichier est si énorme, ici est la partie pertinente:Dans Nixpkgs, qu'est-ce qui fait qu'une dérivation python est une application plutôt qu'une bibliothèque?

redNotebook = buildPythonPackage rec { 
    name = "rednotebook-1.8.1"; 

    src = pkgs.fetchurl { 
     url = "mirror://sourceforge/rednotebook/${name}.tar.gz"; 
     sha256 = "00b7s4xpqpxsbzjvjx9qsx5d84m9pvn383c5di1nsfh35pig0rzn"; 
    }; 

    # no tests available 
    doCheck = false; 

    propagatedBuildInputs = with self; [ pygtk pywebkitgtk pyyaml chardet ]; 

    meta = { 
     homepage = http://rednotebook.sourceforge.net/index.html; 
     description = "A modern journal that includes a calendar navigation, customizable templates, export functionality and word clouds"; 
     license = licenses.gpl2; 
     maintainers = with maintainers; [ tstrobel ]; 
    }; 
    }; 

Ma dérivation ressemble à ceci:

{ pkgs ? import <nixpkgs> {} }: 
let 
    requirements = import ./nix/requirements.nix { inherit pkgs; }; 
in 
pkgs.python35Packages.buildPythonPackage rec { 
    name = "package-name"; 
    version = "1.0.0"; 
    namePrefix = ""; 
    src = ./.; 
    doCheck = false; 
    propagatedBuildInputs = builtins.attrValues requirements.packages; 
} 

requirements.nix était la sortie de pypi2nix et requirements.packages a le type "liste des dérivations". Malgré cela quand je cd dans le chemin de la banque résultant pour Rednotebook il y a un répertoire /bin avec quelques scripts de wrapper. Le chemin du magasin pour mon application il y a juste un lib un non /bin

Comment puis-je dire à Nixpkgs que j'ai une application?

Répondre

1

Il existe buildPythonPackage et buildPythonApplication fonctions, mais à la fin, ils appellent tous les deux mkPythonDerivation.

Une application Python avec un package Nix simple que vous pouvez référencer est Ranger; qui utilise buildPythonApplication. La dérivation résultante contient un wrapper dans /nix/store/PACKAGE/bin/