Nixos中python包集合的正确过程

2024-06-01 14:02:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我感兴趣的是一个可靠而健壮的过程,用于将psycopy库的python包和依赖项收集到一个集合或环境中,以进行自包含的、可维护的安装。另外,对于推荐的方法有一些一般性的建议是很好的,因为google Nixos和Python会产生很多方法,其中一些方法使用了文档不好的函数,例如myEnvFun

psychypy是一个用于心理学实验的python包。它有几个dependencies,其中大多数是python包,但不是全部(例如AVbin);大多数都在nixos包集合中,但不是全部(pyopy-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并安装psycopy,但它不容易使用,因为任何系统范围的python2安装,甚至是作为构建输入一部分安装的python版本都看不到psycopy库的路径。在

这就引出了以下问题,尽管它们是关于精神病的,但它们更普遍地适用于python和Nixos。在

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

Tags: 方法路径环境过程pkg建议pyo精神病
1条回答
网友
1楼 · 发布于 2024-06-01 14:02:57

myEnvFun已弃用,您在哪里读到的?在

答案:

  1. 建议使用nix-shell创建环境,您应该能够在~/pkg/psychopy/内运行它并填充{}。在

    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硬编码来包装结果脚本。

为了讨论,最好加入freenodeirc频道#nixos

相关问题 更多 >