【问题标题】:Aspell dictionaries missing when installed into nix-shell安装到 nix-shell 时缺少 Aspell 字典
【发布时间】:2018-05-12 13:36:48
【问题描述】:

当我在 Mac OSX 上使用 Nix 将带有 Aspell 英语词典的 Aspell 包安装到我的全局环境中时:

$ nix-env -iA nixpkgs.aspell nixpkgs.aspellDicts.en

那么 Aspell 的行为与我预期的一样:

$ aspell dump dicts

en
en-variant_0
...

但是,如果我将软件包安装到 nix-shell 中,那么字典似乎没有正确安装:

$ nix-shell -p aspell aspellDicts.en --pure

$ aspell dump dicts
# nothing printed

$ echo 'word lister to check' | aspell --list
Error: No word lists can be found for the language "en_US".

以下每种变体都会产生相同的问题行为:

  • 安装到非纯的 nix-shell 中,
  • 将 nix 表达式放入 default.nix 文件并运行 nix-shell
  • 安装其他 Aspell 词典

谁能建议如何让它工作?

【问题讨论】:

    标签: nix nixos


    【解决方案1】:

    aspell 二进制文件由 NixPkgs 包装,以通过ASPELL_CONF 环境变量(如果尚未指定)提供安装路径。 (详情cat -v result/bin/aspell

    您可以手动指定ASPELL_CONF,也可以使用NIX_PROFILES 环境变量。例如:

    $ nix-build -E 'with import <nixpkgs> {};
         buildEnv { name = "aspell-env"; paths = [aspell aspellDicts.en]; }'
    
    $ NIX_PROFILES=./result ./result/bin/aspell dump dicts
    en
    en-variant_0
    [...]
    en_US-wo_accents
    

    但是,如果您想使用字典构建独立的aspell 安装,您可以使用aspellWithDicts

    nix-build -E 'with import <nixpkgs> {}; aspellWithDicts (d: [d.en])'
    

    这将对ASPELL_CONF 进行硬编码,因此您无需再次考虑那些环境变量。

    【讨论】:

    • 感谢罗伯特,您的示例按预期工作;)总的来说,我对 buildEnv 的作用有点不清楚 - 所以任何额外的信息将不胜感激。如果我使用aspellWithDicts 构建和安装一个自包含的aspell(带有字典),它将作为一个名为aspell-env 的包安装。然后我可以在另一个包中使用它作为buildInput 吗?即传递给stdenv.mkDerivation。到目前为止,我的实验表明不是。也许是因为我没有指定属性路径?如果是这样,如何确定已安装的aspell-env的属性路径?谢谢
    • buildEnvnix-env -i 在后台使用的函数来构建~/.nix-profile。它创建目录和符号链接以将包的内容“合并”在一起。
    • 应该可以将aspellWithDicts 的结果用作buildInput。无需考虑 aspell 的安装位置,因为通常在打包某些内容时,您希望通过 Nix 表达式包含所有依赖项。无法引用在评估期间安装的任何内容,因为这会使表达式不纯。 (这个规则的例外是&lt;nixpkgs&gt;,你应该尽量避免,但这是另一个话题)
    • 谢谢罗伯特,我想我的问题是:如何将aspellWithDicts 的结果用作buildInput? - 即我如何构建一个自包含的 aspell(带有字典),然后在另一个派生中引用它作为构建输入?非常感谢您的建议。
    • 它应该像{aspellWithDicts, ...}: ...buildInputs = [ aspellWithDicts (d: [d.en]) ]; 一样简单,例如。您在依赖表达式中使用它的方式似乎有问题。在我看来,您的原始问题已得到解答,所以也许您可以接受答案并提出一个新问题,其中包含您现在尝试实现的一些细节?
    猜你喜欢
    • 1970-01-01
    • 2019-10-21
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    相关资源
    最近更新 更多