Почему я получаю сообщение « PermissionError: [Errno 13] Разрешение отклонено: '/homeless-shelter'Q при установке 'jina-hubble-sdk' с помощью Nix Flake

Чтобы создать свою виртуальную среду с помощью Nix Flake, мне нужно добавить несколько пакетов Python, которых нет в менеджере пакетов Nix. У меня проблема с установкой "jina-hubble-sdk"

я бегу

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};
      
      # Define Python package jina-hubble-sdk
      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 = [
          ];

          propagatedBuildInputs = [
            pip
            requests
            aiohttp
            rich
            importlib-metadata
            filelock
            pathspec
            docker
            pyyaml
            python-jose
          ];
        };
   
      # Define Python environment with necessary packages
      pythonEnv = pkgs:
        pkgs.python3.withPackages (ps:
          with ps; [
             jina-hubble-sdk # Include jina in the environment
          ]);
    in {
      devShells.default = pkgs.mkShell {
        buildInputs = with pkgs; [
          curl
          (pythonEnv pkgs)
        ];
      };
    }); }

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

ошибка: строитель для '/nix/store/d4ncmq68cjksfzdhz2klsrr1wm5jm9aj-python3.11-jina-hubble-sdk-0.39.0.drv' ошибка с кодом выхода 1; последние 10 строк журнала: > os.mkdir(сам, режим) > PermissionError: [Errno 13] Разрешение отклонено: '/homeless-shelter' > > > -------------------------------------------------- --------------------- > Провёл 1 тест за 0,002 с. > > ОШИБКА (ошибка=1) > Тест не пройден: <unittest.runner.TextTestResult run=1 ошибки=1 ошибки=0> > ошибка: тест не пройден: <unittest.runner.TextTestResult run=1 ошибки=1 сбои=0> Чтобы просмотреть полные журналы, запустите nix-store -l /nix/store/d4ncmq68cjksfzdhz2klsrr1wm5jm9aj-python3.11-jina-hubble-sdk-0.39.0.drv. ошибка: 1 зависимости вывода '/nix/store/5p0ffk9xjmb3zx73d1gzab0pjngmasbh-python3-3.11.8-env.drv' не удалось построить ошибку: 1 зависимости деривации '/nix/store/g9qd2rvp2fkbz47mzbjnqzlfnkk6hvjm-nix-shell-env.drv' не удалось строить

Он взят из jina-hubble-sdk-0.39.0.drv. Я прочитал это сообщение, в котором говорится о похожей проблеме и говорится о HOME и TMPDIR. Поэтому я даю вам их ценность в среде, аналогичной той, которую я хочу создать.

$HOME

bash: /home/nixos: это каталог

$TMPDIR

bash: /tmp/nix-shell.QHZzjA: Это каталог

Сборки происходят в песочнице; они не могут ничего изменить за пределами этой песочницы, поэтому у них нет действительных домашних каталогов; по этой причине домашний каталог, который вы установили снаружи, не копируется в среду, в которой выполняется сборка. Вы, конечно, можете установить HOME самостоятельно из кода, выполняющего сборку, указав его на место, доступное для записи из песочницы — HOME=$PWD это очень распространенная практика.

Charles Duffy 18.03.2024 21:54

(кстати, по какой причине вы используете $HOME вместо чего-то вроде echo "$HOME" или declare -p HOME или тому подобного?)

Charles Duffy 18.03.2024 21:54

... однако еще раз внесем ясность: вам нужно изменить значение HOME в производной версии, запускающей сборку, а не в вашей личной оболочке. /home/nixos, конечно, не ценность ДОМА в застройщике — застройщик использует /homeless-shelter специально. Эта изоляция предотвращает проникновение деталей среды пользователя, запросившего сборку, в собираемое программное обеспечение.

Charles Duffy 18.03.2024 21:57

Попробуйте прочитать nix show-derivation /nix/store/d4ncmq68cjksfzdhz2klsrr1wm5jm9aj-python3.11-jina-‌​hubble-sdk-0.39.0.dr‌​v, если хотите увидеть переменные среды и шаги сборки, использованные во время конкретной сборки, которая не удалась.

Charles Duffy 18.03.2024 22:00

Обратите внимание: вам не нужны poetry-core в качестве входных данных для сборки этого пакета Python, поскольку он не входит в состав Poetry.

Loïc Reynier 19.03.2024 09:31

@ЧарльзДаффи. У меня нет особой причины использовать $HOME вместо другого. Разве что немного короче

Pierre-olivier Gendraud 19.03.2024 13:52

@LoïcReynier Ты прав. Вы знаете, что это результат копирования другого пакета Python, созданного с помощью peotry. я удалю это

Pierre-olivier Gendraud 19.03.2024 13: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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
156
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Как подчеркивается в комментариях Чарльза Даффи, настройка переменной $HOME необходима в процессе сборки, а не в вашей среде.

В nixpkgs, когда сборке пакета нужен доступный для записи домашний адрес, мы обычно используем export HOME=$(mktemp -d). Чтобы избежать конфликта с предварительно настроенными пакетами buildPhase для Python, вам следует экспортировать переменную на этапе preBuild:

src = { ... };

preBuild = ''
  export HOME=$(mktemp -d)
'';

nativeBuildInputs = [ ... ];

вы можете увидеть полную версию вашего решения здесь stackoverflow.com/questions/78183326/…. (Я использовал preConfig, но когда я тестировал, это не имело никакого значения). Это все равно не работает, но по другой причине.

Pierre-olivier Gendraud 19.03.2024 13:46

К вашему сведению, вы можете пропустить export -- установку нового значения для любой переменной, уже существующей в среде, это значение экспортируется автоматически; так что просто HOME=$(mktemp -d) достаточно. (Тем не менее, я предпочитаю HOME=$PWD в производных Nix - снижает вероятность того, что изменение временного каталога проникнет в ваши сборки и нарушит двоичную воспроизводимость).

Charles Duffy 19.03.2024 16:00

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