假设我使用nix-env
的--query
操作搜索要安装的软件包:
$ nix-env -qa 'aspell.*en'
aspell-dict-en-7.1-0
Run Code Online (Sandbox Code Playgroud)
我在/etc/nixos/configuration.nix
NixOS 的主配置文件中写了这个包名:
environment.systemPackages = with pkgs; [
aspell-dict-en
];
Run Code Online (Sandbox Code Playgroud)
然而,如果我运行sudo nixos-rebuild switch
, NixOS 命令来更新配置并安装declaratively指定的所有系统范围的软件包,它会因错误而中止:
error: undefined variable ‘aspell-dict-en’ at /etc/nixos/configuration.nix:44:5
Run Code Online (Sandbox Code Playgroud)
我知道对于很多包,虽然不是全部,nix-env
返回的名称和应该在environment.systemPackages
配置选项中指定的名称是不同的,但我不明白其中的逻辑。如何安装通过 找到的软件包nix-env
?
Mir*_*lov 25
NixOS 社区有三本手册,如果您遇到困难,请务必先查阅它们:
Nix 上的每个包都由 Nix 表达式指定。Nix 表达式是一些用 Nix 语言编写的文本,通常驻留在扩展名为.nix
.
每个表达式都有所谓的“符号名称”,当您使用nix-env
. 请参阅示例 Nix 表达式。Nix 本身不会在内部的任何地方使用这个符号名称,所以你的包是否命名并不重要aspell-dict-en
,它只是为了你的,人类的,方便。
真正重要的是所谓的“属性路径”。所以你的混淆是在符号名称和属性路径之间。每个包都有一个属性路径,您可以在environment.systemPackages
配置选项中使用它来使用声明性包管理在系统范围内安装。
要找出包的属性路径,-P
请在查询中添加另一个标志:
$ nix-env -qaP 'aspell.*en'
nixos.aspellDicts.en aspell-dict-en-7.1-0
Run Code Online (Sandbox Code Playgroud)
您应该可以轻松地nix-env
每天使用,因此请练习nix-env
使用--query
和--install
选项呼叫。但是,您也可以在Nix 包搜索上浏览包并在线查找它们的属性路径。键入aspell
,单击aspell-dict-en
,您将看到各种包的属性,包括作为安装命令一部分的属性路径:
$ nix-env -iA nixos.pkgs.aspellDicts.en
Run Code Online (Sandbox Code Playgroud)
现在您可以将此属性路径放入/etc/nixos/configuration.nix
:
environment.systemPackages = with pkgs; [
aspellDicts.en
];
Run Code Online (Sandbox Code Playgroud)
然后通过运行更新系统sudo nixos-rebuild switch
。
如果您使用 NixOS 进行数据科学:
Python模块:
nix-env -qaP .\*pylint.\*
Run Code Online (Sandbox Code Playgroud)
或者
py_pkgs="nix_packages_py35.txt"
nix-env -qaP | grep -i python36 > ${py_pkgs}
grep pandas ${py_pkgs}
Run Code Online (Sandbox Code Playgroud)
或者,如果您正在寻找特别 R包/库
nix-env -f "<nixpkgs>" -qaP -A rPackages .\*tidyverse.\*
Run Code Online (Sandbox Code Playgroud)
或者你会得到例如 npm 包:
nix-env -qaPA 'nixos.nodePackages'
Run Code Online (Sandbox Code Playgroud)
还有一个网站可以搜索pkgs
归档时间: |
|
查看次数: |
14667 次 |
最近记录: |