nix:从一个本地 perl 包引用另一个
nix: referencing one local perl package from another
我正在尝试构建一个使用另一个作为依赖项的本地 perl 包。
有问题的依赖是Getopt-Plus
;它是使用这个 nix 表达式安装的:
{ fetchurl, perlPackages }:
perlPackages.buildPerlModule rec {
version = "0.99";
name = "Getopt-Plus";
src = fetchurl {
url = "mirror://cpan/authors/id/F/FL/FLUFFY/${name}-${version}.tar.gz";
sha256 = "0vsr4d0myv98aqbs7rc5rvqdpfz1vg1w7b5wyn4i6lmycp1wxxqk";
};
buildInputs = [ ];
propagatedBuildInputs = with perlPackages; [ ];
doCheck = false;
}
安装成功就好了,如下所示:
$ nix-env -q | grep Getopt
perl5.28.2-Getopt-Plus-0.99
现在,我有一个本地包,令人兴奋地称为 Finance
,它使用 Getopt-Plus。所以这是一个假定的 nix 表达式:
{ nixpkgs }:
with nixpkgs;
with perlPackages;
buildPerlModule rec {
version = "1.01";
name = "Finance";
src = fetchurl {
url = "http://localhost:8888/${name}-${version}-002.tar.gz";
sha256 = "0fib0rbzx8519imsw9jrfl805r6lrl6qzbnhipxxix5scar913r7";
};
buildInputs = [ ];
propagatedBuildInputs = [ "Getopt-Plus" ];
doCheck = false;
}
与覆盖文件一起,允许引用本地定义的包(通过 self
):
self: super: {
Finance = import ../pkgs/Finance/default.nix { nixpkgs = self; };
}
我的问题是,如何引用Getopt-Plus;我尝试的一切都会导致 build input Getopt-Plus does not exist
.
形式的错误
我试过使用双引号和不使用双引号(不使用引号会导致 "undefined variable" 错误;显然它认为 Getopt-Plus
将是一个变量,我猜是因为连字符);我试过 perl5.28.2-Getopt-Plus-0.99
的 "installed" 名字;我尝试了这些的其他变体(例如,perl5.28.2-Getopt-Plus
、perl-Getopt-Plus
、perl-Getopt-Plus-0.99
。我还尝试从 Getopt-Plus 安装中删除连字符以变为 GetoptPlus
;它安装当然,它本身很好,但似乎无助于解决这个问题。
如果我启动 nix repl,设置 p = import <nixpkgs> {}
;然后它清楚地显示 p.GetoptPlus
(和 p.Finance
)作为有效推导。
我的问题是:
- 允许 Finance 依赖 Getopt-Plus 的正确名称是什么?和
- 我应该在这里使用 buildInputs 还是 propagatedBuildInputs?我不清楚其中的区别。
感谢您的帮助。
添加指向 GetoptPlus 的覆盖使其在 nixpkgs 中可用,我的问题已解决:
self: super: {
Getopt-Plus = import ../pkgs/Getopt-Plus/default.nix { nixpkgs = self; };
}
我正在尝试构建一个使用另一个作为依赖项的本地 perl 包。
有问题的依赖是Getopt-Plus
;它是使用这个 nix 表达式安装的:
{ fetchurl, perlPackages }:
perlPackages.buildPerlModule rec {
version = "0.99";
name = "Getopt-Plus";
src = fetchurl {
url = "mirror://cpan/authors/id/F/FL/FLUFFY/${name}-${version}.tar.gz";
sha256 = "0vsr4d0myv98aqbs7rc5rvqdpfz1vg1w7b5wyn4i6lmycp1wxxqk";
};
buildInputs = [ ];
propagatedBuildInputs = with perlPackages; [ ];
doCheck = false;
}
安装成功就好了,如下所示:
$ nix-env -q | grep Getopt
perl5.28.2-Getopt-Plus-0.99
现在,我有一个本地包,令人兴奋地称为 Finance
,它使用 Getopt-Plus。所以这是一个假定的 nix 表达式:
{ nixpkgs }:
with nixpkgs;
with perlPackages;
buildPerlModule rec {
version = "1.01";
name = "Finance";
src = fetchurl {
url = "http://localhost:8888/${name}-${version}-002.tar.gz";
sha256 = "0fib0rbzx8519imsw9jrfl805r6lrl6qzbnhipxxix5scar913r7";
};
buildInputs = [ ];
propagatedBuildInputs = [ "Getopt-Plus" ];
doCheck = false;
}
与覆盖文件一起,允许引用本地定义的包(通过 self
):
self: super: {
Finance = import ../pkgs/Finance/default.nix { nixpkgs = self; };
}
我的问题是,如何引用Getopt-Plus;我尝试的一切都会导致 build input Getopt-Plus does not exist
.
我试过使用双引号和不使用双引号(不使用引号会导致 "undefined variable" 错误;显然它认为 Getopt-Plus
将是一个变量,我猜是因为连字符);我试过 perl5.28.2-Getopt-Plus-0.99
的 "installed" 名字;我尝试了这些的其他变体(例如,perl5.28.2-Getopt-Plus
、perl-Getopt-Plus
、perl-Getopt-Plus-0.99
。我还尝试从 Getopt-Plus 安装中删除连字符以变为 GetoptPlus
;它安装当然,它本身很好,但似乎无助于解决这个问题。
如果我启动 nix repl,设置 p = import <nixpkgs> {}
;然后它清楚地显示 p.GetoptPlus
(和 p.Finance
)作为有效推导。
我的问题是:
- 允许 Finance 依赖 Getopt-Plus 的正确名称是什么?和
- 我应该在这里使用 buildInputs 还是 propagatedBuildInputs?我不清楚其中的区别。
感谢您的帮助。
添加指向 GetoptPlus 的覆盖使其在 nixpkgs 中可用,我的问题已解决:
self: super: {
Getopt-Plus = import ../pkgs/Getopt-Plus/default.nix { nixpkgs = self; };
}