4

我对将 Psychopy 库的 python 包和依赖项收集到单个集合或环境中以进行独立且可维护的安装的可靠且强大的过程感兴趣。同样,最好对推荐的方法提出一些一般性建议,因为谷歌搜索 Nixos 和 Python 会产生许多方法,其中一些使用记录不充分的函数,例如 myEnvFun

Psychopy 是一个用于心理学实验的 Python 包。它有几个依赖项,其中大部分是python包,但不是全部(例如AVbin);其中大部分都在 nixos 包集合中,但不是全部(pyopy-parallel)。

我的目标是能够将所有需要的部分组合在一起,并通过一个安装请求拥有一个正常运行的心理环境。我已经想出了如何安装psychopy,但是路径不太好。

例如,如果以下内容另存为~/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,但它不会很容易使用,因为任何系统范围的 python2 安装,甚至作为构建输入的一部分安装的 python 版本都看不到psychopy库的路径。

这导致了以下问题,尽管它们是专门关于精神病学的,但它们更普遍地适用于 python 和 Nixos。

  1. 推荐的做法是将 nixos 表达式集合(例如 numpy 和 scipy)中存在的 python 包作为系统或用户范围的包或每个特定的实验库安装一次?
  2. 如果希望将 python 集合与 nixos 表达式通道之外的多个库捆绑在一起(例如,psychopy 和 pyo 和 pyparallel),推荐的程序是什么?如果需要一些非 python 软件,这将如何改变,例如在这种情况下是 AVbin(它实际上有安装说明,根据我的理解,它引用了 Nixos 中不标准的路径,即 /usr/lib)?
  3. 可以分享一些关于在 Nixos 上下文中处理 Python 路径的讨论吗?
4

1 回答 1

2

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对于命令行程序,我们然后用硬编码包装生成的脚本。

最好加入 Freenode IRC 频道#nixos 进行讨论

于 2015-09-27T20:26:35.797 回答