我有一个带有多个入口点json_out
和json_in
的python应用程序。我可以使用此default.nix
with import <nixpkgs> {};
(
let jsonio = python37.pkgs.buildPythonPackage rec {
pname = "jsonio";
version = "0.0.1";
src = ./.;
};
in python37.withPackages (ps: [ jsonio ])
).env
像这样:
$ nix-shell --run "json_out"
{ "a" : 1, "b", 2 }
$ nix-shell --run "echo { \"a\" : 1, \"b\", 2 } | json_in"
keys: a,b
values: 1,2
我还要在nix shell中调用jq
,如下所示:
$ nix-shell --run --pure "json_out | jq '.a' | json_in"
但是我不能,因为它不包括在内。我知道我可以使用此default.nix
with import <nixpkgs> {};
stdenv.mkDerivation rec {
name = "jsonio-environment";
buildInputs = [ pkgs.jq ];
}
它可以独立工作:
$ nix-shell --run --pure "echo { \"a\" : 1, \"b\", 2 } | jq '.a'"
{ "a" : 1 }
但是现在我没有我的申请:
$ nix-shell --run "json_out | jq '.a'"
/tmp/nix-shell-20108-0/rc: line 1: json_out: command not found
我可以提供哪个default.nix文件,其中包含我的应用程序和jq软件包?
答案 0 :(得分:1)
实现此目标的首选方法是使用def some_function(var):
... some operations on var...
return var
向环境中添加其他依赖项,如下所示:
.overrideAttrs
答案 1 :(得分:1)
我需要:
buildPythonPackage
的输出作为mkDerivation
输入的一部分env
。根据错误消息的提示:
Python'env'属性用于交互式nix-shell 会议,而不是用于建设!
这就是我最终得到的:
with import <nixpkgs> {};
let jsonio_installed = (
let jsonio_module = (
python37.pkgs.buildPythonPackage rec {
pname = "jsonio";
version = "0.0.1";
src = ./.;
}
);
in python37.withPackages (ps: [jsonio_module ])
);
in stdenv.mkDerivation rec {
name = "jsonio-environment";
buildInputs = [ pkgs.jq jsonio_installed ];
}