Как исправить ошибку сборки Nix из-за файла, использующего способ разрыва строки Windows

Я использую NixOS на WSL

Я использую версию nix 2.18.1. я бегу

 nix develop

в каталоге, содержащем flake.nix, это выглядит так:

{
 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};
      
      jina-hubble-sdk = with pkgs.python3Packages;
        buildPythonPackage rec {
          pname = "jina-hubble-sdk";
          version = "0.39.0";

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

          nativeBuildInputs = [
            poetry-core
            pkgs.dos2unix # Add dos2unix to convert line endings
          ];

          propagatedBuildInputs = [
            pep517
            pip
            requests
            aiohttp
            rich
            importlib-metadata
            filelock
            pathspec
            docker
            pyyaml
            python-jose
          ];
          

          # Convert line endings to Unix-style
          preConfigure = ''
            export HOME=$(mktemp -d)
          '';
             # put this code inside preConfigure if you want to run it dos2unix -f /nix/store/v099hqvw5z87423p4hz1vfhzaqa07dii-stdenv-linux/setup
        };
   
      pythonEnv = pkgs:
        pkgs.python3.withPackages (ps:
          with ps; [
             jina-hubble-sdk
          ]);
    in {
      devShells.default = pkgs.mkShell {
        buildInputs = with pkgs; [
          curl
          ollama
          (pythonEnv pkgs)
        ];
      };
    });
}

и я получаю следующую ошибку

ошибка: строитель для '/nix/store/dm6cxw020s7whbfgqj8jivd3dv1pby0i-python3.11-jina-hubble-sdk-0.39.0.drv' ошибка с кодом выхода 127; последние 10 строк журнала: > Использование setuptoolsCheckPhase > Фаза выполнения: unpackPhase > распаковка исходного архива /nix/store/9q6b5l6955sabgvk8ah5xx0sfji25zmn-jina-hubble-sdk-0.39.0.tar.gz > исходный корень — jina-hubble-sdk-0.39.0 > установка SOURCE_DATE_EPOCH на временную метку 1688549032 файла jina-hubble-sdk-0.39.0/setup.cfg > Фаза выполнения: patchPhase > Фаза выполнения: updateAutotoolsGnuConfigScriptsPhase > Фаза выполнения: configurePhase > /nix/store/v099hqvw5z87423p4hz1vfhzaqa07dii-stdenv-linux/setup: строка 114: $'\r': команда не найдена > /nix/store/v099hqvw5z87423p4hz1vfhzaqa07dii-stdenv-linux/setup: строка 131: pop_var_context: заголовок Shell_variables, а не контекст функции Чтобы просмотреть полные журналы, запустите nix-store -l /nix/store/dm6cxw020s7whbfgqj8jivd3dv1pby0i-python3.11-jina-hubble-sdk-0.39.0.drv. ошибка: 1 зависимости вывода '/nix/store/25gl4f29rr56ci1h5k53wmm7wgfmk2p2-python3-3.11.8-env.drv' не удалось построить ошибку: 1 зависимости деривации Ошибка '/nix/store/pxkgnl5nx66fcdi1rkvz86kbfrvlmhn2-nix-shell-env.drv' строить

Важная строка в сообщении об ошибке:

/nix/store/v099hqvw5z87423p4hz1vfhzaqa07dii-stdenv-linux/setup: строка 114: $'\r': команда не найдена >

Я предположил, что проблема связана с тем, что Linux и Windows (см. этот сайт) по-разному разрывают строку. Я хотел адаптировать файл, который вызвал проблему:

   preConfigure = ''
      #   dos2unix -f /nix/store/v099hqvw5z87423p4hz1vfhzaqa07dii-stdenv-linux/setup
      # '';

но это ничего не меняет. Поэтому я комментирую это, но вы можете раскомментировать его, чтобы проверить самостоятельно.

Скопировал и вставил ваш flake.nix и запустил nix develop .# без ошибок.

Loïc Reynier 19.03.2024 14:08

@LoïcReynier Хорошо, это очень странно. Я пробовал nix development и nix development .#, но это не работает. Какая у тебя версия никса? У меня 2.18.1. (вы можете использовать эту команду nix --version)

Pierre-olivier Gendraud 19.03.2024 17:47

Та же версия. Вы можете попробовать обновить файл flake.lock.

Loïc Reynier 19.03.2024 18:33

@LoïcReynier Я удалил flake.lock и перезапустил flake.nix. У меня та же проблема. Я запускаю NixOS на WSL. Как вы думаете, это связано

Pierre-olivier Gendraud 19.03.2024 19:48

Также использую NixOS на WSL. Вы уверены, что используете flake.nix из поста?

Loïc Reynier 19.03.2024 20:05

@LoïcReynier Я проверил еще раз. Я копирую этот flake.nix в каталог и запускаю nix development в этом же каталоге. И у меня все еще та же ошибка

Pierre-olivier Gendraud 19.03.2024 21:40

@LoïcReynier, возможно, это глупые вопросы, но мне нужно кое-что попробовать: 1) Какова для вас ценность ${system}. Для меня это x86_64-linux. 2) Можете ли вы протестировать nix development -i и сказать, работает ли он еще?

Pierre-olivier Gendraud 20.03.2024 20:53
Стоит ли изучать 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
7
439
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Хотя в сообщении об ошибке говорилось, что проблема связана с файлом, который не является разработанным мной flake.nix, проблемы возникают из разработанного мной flake.nix. Я пишу код, используя код, открытый из Windows. Следовательно, он использует кодировку DOS.

запустите nix development в другом каталоге, содержащем этот файл

{
 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};
      

    in {
      devShells.default = pkgs.mkShell {
        buildInputs = with pkgs; [
            pkgs.dos2unix
        ];
      };
    });
}

Теперь вы можете запустить

  dos2unix flake.nix

в каталоге с флейком выдает ошибку. он изменил кодировку. И теперь вы можете бежать

 nix develop

с этой чешуйкой все будет работать нормально

Ответ исходит от ВТимофеенко, который там это написал: https://discourse.nixos.org/t/what-could-cause-this-flake-to-fail-on-my-computer-and-succeed-on-another/41868/2

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