Правильная процедура для коллекций пакетов python в Nixos

Меня интересует надежная и надежная процедура сбора пакета python и зависимостей для библиотеки Psychopy в единую коллекцию или среду для создания автономной и удобной в сопровождении установки. Также было бы хорошо иметь некоторые общие рекомендации по рекомендуемому способу сделать это, поскольку поиск в Google Nixos и Python дает ряд подходов, некоторые из которых используют плохо документированные функции, например. myEnvFun

Psychopy — это пакет Python, используемый для психологических экспериментов. Он имеет несколько зависимостей, большинство из которых являются пакетами Python, но не все (например, AVbin) ; и большинство из них находятся в коллекции пакетов nixos, но не все (pyo и py-parallel).

Моя цель состояла бы в том, чтобы собрать все необходимые части вместе и иметь функционирующую среду психопсии с помощью одного запроса на установку. Я выяснил, как установить Психопи, но путь не очень хорош.

Например, если следующее сохраняется как ~/pkg/psychopy/default.nix

let
  pkgs = import <nixpkgs> {};
in
{stdenv ? pkgs.stdenv, python ? pkgs.python, fetchurl ? pkgs.fetchurl}:

with pkgs;
buildPythonPackage {
  name = "psychopy";

  src = fetchurl {
    url = http://sourceforge.net/projects/psychpy/files/PsychoPy/PsychoPy-1.82.02.zip;
    md5 = "52309280bdca4408970aab0952c674e4";
  };

  buildInputs = [
    python27
  ];

}

Можно запустить nix-env -f ~/pkg/ -iA psychopy, и Psychopy будет установлен, но его будет нелегко использовать, потому что путь к библиотеке Psychopy не виден ни для общесистемной установки python2, ни даже для версии python, установленной как часть входных данных сборки.

Это приводит к следующим вопросам, которые, хотя они конкретно касаются психопии, более широко применимы к Python и Nixos.

  1. Рекомендуется ли устанавливать пакеты python, которые существуют в коллекциях выражений nixos (например, numpy и scipy), один раз как общесистемные или пользовательские пакеты или с каждой конкретной экспериментальной библиотекой?
  2. Если кто-то хочет объединить коллекцию python с более чем одной библиотекой за пределами канала выражения nixos (например,Psychopy, pyo и pyparallel), какова рекомендуемая процедура? И как это изменится, если потребуется какое-то программное обеспечение, отличное от Python, например. в этом случае AVbin (у которого на самом деле есть инструкции по установке, которые относятся к путям, которые, насколько я понимаю, не являются стандартными для Nixos, то есть /usr/lib)?
  3. Можно ли поделиться некоторыми обсуждениями обработки путей в Python с контекстом Nixos?

person brittAnderson    schedule 27.09.2015    source источник
comment
Я думаю, что AVbin больше не нужен с недавними изменениями в стимуле фильма. Я думаю, что большинство людей используют Anaconda, и Эрик Кастман создал рецепт установки PsychoPy здесь: github.com/kastman/conda. -recipes, хотя это может быть обновлено.   -  person Michael MacAskill    schedule 27.09.2015
comment
@MichaelMacAskill Я надеялся, что nixos может предложить хороший способ создания стандартной переносимой версии Linux в лаборатории, где стандартная команда может использоваться для создания стандартных машин. Nixos в принципе дает преимущество не только в том, что у него есть отдельная психопия, но и во всем остальном. Итак, хотя хорошо знать, что avbin не требуется и что вики нуждается в обновлении, вопрос о том, как настроить nixos config.nix, остается открытым. Спасибо.   -  person brittAnderson    schedule 28.09.2015


Ответы (1)


myEnvFun устарела, где вы об этом прочитали?

Ответы:

  1. Рекомендуется создавать среды с nix-shell, вы должны иметь возможность запускать его внутри ~/pkg/psychopy/ и заполнять $PYTHONPATH.

    Идея Nix заключается не в том, чтобы иметь какие-то глобальные наборы пакетов, а в том, чтобы иметь среду для каждой потребности.

  2. Достаточно просто объявить AVBin как зависимость от сборки. Обратите внимание, что вашим пользователям потребуется установить Nix. Если вы хотите избежать этого, вам нужно написать обертку, которая будет делать что-то похожее на nix-shell.

  3. Здесь мало что происходит. Все пакеты Nix собраны в изолированных chroot. В Nix есть концепция под названием setup hooks, которая выполняется для каждого пакета в дереве зависимостей. Итак, для пакетов Python https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/interpreters/python/2.7/setup-hook.sh#L15 вызывается для заполнения $PYTHONPATH. Для программ командной строки мы затем оборачиваем получившийся сценарий жестко заданным кодом $PYTHONPATH.

Для обсуждения лучше присоединиться к IRC-каналу Freenode #nixos

person iElectric    schedule 27.09.2015
comment
Особенности на вики-странице здесь: nixos.org/wiki/Python и в комментариях за январь здесь: github.com/NixOS/nixpkgs/issues/5623 Суть в том, что я в над моей головой, и, возможно, следует подождать, пока все стабилизируется и документация улучшится, но я думаю, что другим будет полезен ответ, в котором изложен шаг по созданию такой среды с использованием python 27, numpy и некоторые неупакованные библиотеки, такие как психопи, поскольку ни один источников, доступных для Google, согласованы. - person brittAnderson; 28.09.2015