如何使用nix-shell启用可选的构建依赖项?

时间:2017-03-09 12:11:28

标签: python opencv gtk nix nixos

我想在nix-shell中使用gtk-enabled opencv和python 3。

我可以使用:

启动一个非gtk启用的python3 / opencv环境
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的包定义中,有一些函数参数enableGtk2enableGtk3可以在构建中打开可选的依赖项。

我阅读了几本nix教程和该语言的完整语法定义。

启用可选依赖项非常重要,因此我希望使用命令行工具(即nix-shell)可行。有谁知道它是如何完成的?

1 个答案:

答案 0 :(得分:2)

这是在这种情况下您需要使用的命令:

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

另一种解决方案是按nixpkgs documentation中的说明一劳永逸地覆盖python35Packages.opencv3包。然后你就可以不改变你的命令。