Как включить дополнительную зависимость сборки с помощью nix-shell?

Я хотел бы использовать opencv с поддержкой gtk с python 3 внутри nix-shell.

Я могу запустить среду python3/opencv без поддержки gtk с помощью:

nix-shell --pure -p python35Packages.opencv3

Однако команды, открывающие окна, не работают:

[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

В определении пакета в /nixpkgs/pkgs/development/libraries/opencv/3.x.nix есть функциональные параметры enableGtk2 и enableGtk3, которые включают необязательную зависимость в сборке.

Я прочитал несколько руководств по nix и полное определение синтаксиса для языка.

Включение необязательной зависимости довольно фундаментально, поэтому я ожидаю, что это можно будет сделать с помощью инструментов командной строки, то есть nix-shell. Кто-нибудь знает, как это делается?


person Andrew Wagner    schedule 09.03.2017    source источник


Ответы (1)


Это команда, которую вам нужно будет использовать в этом случае:

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

Другим решением было бы переопределить пакет python35Packages.opencv3 раз и навсегда, как описано в документация nixpkgs. Тогда вы сможете использовать свою команду без изменений.

person Zimm i48    schedule 10.03.2017