Почему при попытке собрать этот пакет Python возвращается сообщение «Бэкэнд «poetry.core.masonry.api» недоступен»

К сожалению, пакет Python DocArray недоступен в коллекции пакетов Nix. Поэтому я стараюсь построить его сам.

Этот веб-сайт помог мне использовать pkgs.python3Packages.buildPythonPackage, и я получил sha256 хэш на этом веб-сайте.

{
  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  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 в nixpkgs: github.com/NixOS/nixpkgs/pull/296615

Loïc Reynier 17.03.2024 12:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
210
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно добавить poetry-core к входным данным сборки (nativeBuildInputs), чтобы установить Poetry в среду сборки. Затем вы должны указать зависимости пакета в propagatedBuildInputs:

{
  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};
      docarray = with pkgs.python3Packages;
        buildPythonPackage rec {
          pname = "docarray";
          version = "0.40.0";
          format = "pyproject";

          src = pkgs.fetchPypi {
            inherit pname version;
            sha256 = "c3f3b88b7b6128c10308dddbd21650c9845e270da850cf6718cb1d3d867d5986";
          };

          nativeBuildInputs = [
            poetry-core
          ];

          propagatedBuildInputs = [
            numpy
            orjson
            pydantic
            rich
            types-requests
            typing-inspect
          ];
        };

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

          (pythonEnv pkgs)
        ];
      };
    });
}

Альтернативой может быть использование поэзии2nix, чтобы не указывать зависимости вручную. Однако, поскольку в этом пакете всего несколько зависимостей (и они уже упакованы в nixpkgs), мне это кажется излишним.

Другие вопросы по теме