2017-03-09 2 views
0

Je voudrais utiliser gtk-enabled opencv avec python 3 à l'intérieur d'un shell nix.Comment activer une dépendance de construction optionnelle en utilisant nix-shell?

Je suis en mesure de lancer un environnement python3/OpenCV permis non-gtk avec:

nix-shell --pure -p python35Packages.opencv3 

Cependant, les commandes que les fenêtres ouvertes échouent:

[nix-shell:~/src/nixpkgs/pkgs/development/libraries/opencv]$ python 
Python 3.5.3 (default, Jan 17 2017, 07:57:56) 
[GCC 5.4.0] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import cv2 
>>> cv2.namedWindow("foo") 
OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvNamedWindow, file /tmp/nix-build-opencv-3.2.0.drv-0/opencv-3.2.0-src/modules/highgui/src/window.cpp, line 565 

Dans la définition du paquet dans /nixpkgs/pkgs/development/libraries/opencv/3.x.nix, il sont les paramètres de fonction enableGtk2 et enableGtk3 qui activent la dépendance facultative dans la génération.

J'ai lu plusieurs didacticiels nix et la définition de la syntaxe entière pour le langage.

Mise en service d'une dépendance optionnelle est assez fondamentale, donc je pensais que ce serait faisable à l'aide des outils de ligne de commande, à savoir nix-shell. Quelqu'un sait comment cela est fait?

Répondre

2

C'est la commande que vous devez utiliser dans ce cas:

nix-shell -p "python35Packages.opencv3.override { enableGtk2 = true; }" 

Une autre solution serait de remplacer le paquet une fois pour toutes python35Packages.opencv3 comme expliqué dans le nixpkgs documentation. Ensuite, vous seriez en mesure d'utiliser votre commande inchangée.