未找到 glpk 和 pcre (NIXOS)
glpk and pcre not found (NIXOS)
我正在尝试在我的 NixOS 中构建我自己的 nix-shell 环境。我有 2 个 .nix 文件,default.nix 和 shell.nix,配置如下:
default.nix:
{ stdenv, haskellngPackages}:
let
env = haskellngPackages (p: with p; [
aeson
bytestring
conduit
snap
ghcjs
text
wai
warp
yaml
haskell.packages.lts-4_01.ghc
]);
in
stdenv.mkDerivation {
name = "RiziLab";
buildInputs = [
glpk
pcre
env
];
STACK_IN_NIX_EXTRA_ARGS
= " --extra-lib-dirs=${glpk}/lib"
+ " --extra-include-dirs=${pglpk}/include"
+ " --extra-lib-dirs=${pcre}/lib"
+ " --extra-include-dirs=${pcre}/include"
;
}
shell.nix:
{ pkgs ? (import <nixpkgs> {} ) }:
(import ./default.nix) {
stdenv = pkgs.stdenv;
haskellngPackages = pkgs.haskellngPackages;
}
但是当我执行 nix-shell 时,出现了这个错误:
error: undefined variable ‘glpk’
据我了解,default.nix 只是一个将由 shell.nix 调用的函数,cmiiw。问题是:
- 我的代码有没有错误?
- 我用过
{nixpkgs ? (import <nixpkgs> {} ) }
和{pkgs ? (import <nixpkgs> {})}
,但还是出现同样的错误,这两个有什么不同吗?
- 是否可以排除 ghcwithPackages?
glpk
未在 default.nix
中定义是问题所在。
glpk
路径是 pkgs.glpk
但 default.nix
范围内没有 pkgs
并且 glpk
没有作为参数传递给函数。
另外,不需要2个单独的文件,可以将整个组合在一个文件中:
{ nixpkgs ? import <nixpkgs> {}, compiler ? "lts-4_1" }:
let
inherit (nixpkgs) pkgs;
ghc = pkgs.haskell.packages.${compiler}.ghcWithPackages (ps: with ps; [
aeson
bytestring
conduit
snap
# ghcjs # not a package but a compiler
text
wai
warp
yaml
]);
in
pkgs.stdenv.mkDerivation {
name = "RiziLab";
buildInputs = with pkgs; [ ghc glpk pcre ];
shellHook = "eval $(egrep ^export ${ghc}/bin/ghc)";
STACK_IN_NIX_EXTRA_ARGS = with pkgs;
" --extra-lib-dirs=${glpk}/lib"
+ " --extra-include-dirs=${glpk}/include"
+ " --extra-lib-dirs=${pcre}/lib"
+ " --extra-include-dirs=${pcre}/include"
;
}
您可以在 Nixpkgs manual 中了解有关在 nix 中使用 haskell 的更多信息。
我正在尝试在我的 NixOS 中构建我自己的 nix-shell 环境。我有 2 个 .nix 文件,default.nix 和 shell.nix,配置如下:
default.nix:
{ stdenv, haskellngPackages}:
let
env = haskellngPackages (p: with p; [
aeson
bytestring
conduit
snap
ghcjs
text
wai
warp
yaml
haskell.packages.lts-4_01.ghc
]);
in
stdenv.mkDerivation {
name = "RiziLab";
buildInputs = [
glpk
pcre
env
];
STACK_IN_NIX_EXTRA_ARGS
= " --extra-lib-dirs=${glpk}/lib"
+ " --extra-include-dirs=${pglpk}/include"
+ " --extra-lib-dirs=${pcre}/lib"
+ " --extra-include-dirs=${pcre}/include"
;
}
shell.nix:
{ pkgs ? (import <nixpkgs> {} ) }:
(import ./default.nix) {
stdenv = pkgs.stdenv;
haskellngPackages = pkgs.haskellngPackages;
}
但是当我执行 nix-shell 时,出现了这个错误:
error: undefined variable ‘glpk’
据我了解,default.nix 只是一个将由 shell.nix 调用的函数,cmiiw。问题是:
- 我的代码有没有错误?
- 我用过
{nixpkgs ? (import <nixpkgs> {} ) }
和{pkgs ? (import <nixpkgs> {})}
,但还是出现同样的错误,这两个有什么不同吗? - 是否可以排除 ghcwithPackages?
glpk
未在 default.nix
中定义是问题所在。
glpk
路径是 pkgs.glpk
但 default.nix
范围内没有 pkgs
并且 glpk
没有作为参数传递给函数。
另外,不需要2个单独的文件,可以将整个组合在一个文件中:
{ nixpkgs ? import <nixpkgs> {}, compiler ? "lts-4_1" }:
let
inherit (nixpkgs) pkgs;
ghc = pkgs.haskell.packages.${compiler}.ghcWithPackages (ps: with ps; [
aeson
bytestring
conduit
snap
# ghcjs # not a package but a compiler
text
wai
warp
yaml
]);
in
pkgs.stdenv.mkDerivation {
name = "RiziLab";
buildInputs = with pkgs; [ ghc glpk pcre ];
shellHook = "eval $(egrep ^export ${ghc}/bin/ghc)";
STACK_IN_NIX_EXTRA_ARGS = with pkgs;
" --extra-lib-dirs=${glpk}/lib"
+ " --extra-include-dirs=${glpk}/include"
+ " --extra-lib-dirs=${pcre}/lib"
+ " --extra-include-dirs=${pcre}/include"
;
}
您可以在 Nixpkgs manual 中了解有关在 nix 中使用 haskell 的更多信息。