You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建DocArray包时出现"Backend 'poetry.core.masonry.api'不可用"错误求助

问题:Nix构建DocArray时提示找不到Poetry模块错误

由于Python包DocArray不在Nix包集合中,我尝试使用pkgs.python3Packages.buildPythonPackage自行构建,从PyPI获取了sha256哈希,配置了如下Flake文件:

{
  description = "Python environment with ollama";

  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
  inputs.flake-utils.url = "github:numtide/flake-utils";

  outputs = { self, nixpkgs, flake-utils }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = nixpkgs.legacyPackages.${system};
        python = pkgs.python311;
        ollama = pkgs.ollama;
        docarray = pkgs.python3Packages.buildPythonPackage rec {
          pname = "docarray";
          version = "0.40.0";
          format = "pyproject"; # Specify the package format
          src = pkgs.fetchPypi {
            inherit pname version;
            sha256 = "c3f3b88b7b6128c10308dddbd21650c9845e270da850cf6718cb1d3d867d5986"; # TODO
      };
          #code proposed by phind (something like chatgpt) but it didn't help. Therefore it is commented
          # Add Poetry to the build inputs
          #buildInputs = [ pkgs.poetry ];
          # Add any runtime dependencies here
          #propagatedBuildInputs = [];
          # Add any Python package metadata here
          #meta = with pkgs.lib; {
          #  homepage = "https://github.com/docarray/docarray";
          #  description = "A Python package for managing document arrays";
          #  license = licenses.mit;
          #};
        };

        Py = python.withPackages (ps: with ps; [
            langchain-community
            langchainplus-sdk
            langchain
            tiktoken
            docarray
        ]);
      in {
        devShells.default = pkgs.mkShell {
          buildInputs = [
            pkgs.curl
            ollama
            Py
          ];
        };
      });
}

运行nix develop后出现如下错误:

error: builder for '/nix/store/0dq2bsq9zkgmp845l2ncqkk2i9p1pqlm-python3.11-docarray-0.40.0.drv' failed with exit code 1;
       last 10 log lines:
       >   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
       >   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
       >   File "<frozen importlib._bootstrap>", line 1126, in _find_and_load_unlocked
       >   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
       >   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
       >   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
       >   File "<frozen importlib._bootstrap>", line 1140, in _find_and_load_unlocked
       > ModuleNotFoundError: No module named 'poetry'
       >
       > ERROR Backend 'poetry.core.masonry.api' is not available.
       For full logs, run 'nix-store -l /nix/store/0dq2bsq9zkgmp845l2ncqkk2i9p1pqlm-python3.11-docarray-0.40.0.drv'. error: 1 dependencies of derivation '/nix/store/rqg7i9w02fmbxqf2c4i3gz16icsx7q68-python3-3.11.8-env.drv' failed to build error: 1 dependencies of derivation '/nix/store/qxx83jf2n4l8zchdwagg6wsk4pz439v7-nix-shell-env.drv' failed to build
解决方案

错误原因

DocArray使用poetry.core.masonry.api作为构建后端,Nix在构建过程中找不到该依赖。之前尝试添加系统级的pkgs.poetry是错误的,因为构建后端需要的是Python包poetry-core,而非系统工具。

修改后的Flake配置

对docarray的构建配置做如下调整:

docarray = pkgs.python3Packages.buildPythonPackage rec {
  pname = "docarray";
  version = "0.40.0";
  format = "pyproject";
  src = pkgs.fetchPypi {
    inherit pname version;
    sha256 = "c3f3b88b7b6128c10308dddbd21650c9845e270da850cf6718cb1d3d867d5986";
  };
  # 添加构建后端所需的poetry-core包
  nativeBuildInputs = [ pkgs.python3Packages.poetry-core ];
  # 添加DocArray的运行时依赖(根据PyPI官方依赖列表整理)
  propagatedBuildInputs = with pkgs.python3Packages; [
    numpy
    pydantic
    requests
    typing-extensions
    pillow
    python-multipart
    jinja2
    markdown-it-py
    mdurl
    pygments
    rich
    grpcio
    grpcio-tools
    protobuf
    cloudpickle
    psutil
    orjson
    python-dotenv
  ];
  meta = with pkgs.lib; {
    homepage = "https://github.com/docarray/docarray";
    description = "A Python package for managing document arrays";
    license = licenses.mit;
  };
};

关键调整说明

  1. 添加nativeBuildInputs:将poetry-core加入构建时的依赖,确保Nix能找到DocArray的构建后端。
  2. 补充propagatedBuildInputs:DocArray运行时需要多个依赖包,必须显式声明,否则构建完成后运行代码会出现模块缺失错误。
  3. 启用meta配置:完善包的元信息,符合Nix打包规范。

替换原配置中的docarray部分后,重新运行nix develop即可完成构建。


内容的提问来源于stack exchange,提问作者Pierre-olivier Gendraud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 20:24:56