python-3.x NixOS:如何在Jupyter环境中添加先知?

tkqqtvp1  于 2023-05-02  发布在  Python
关注(0)|答案(2)|浏览(121)

我使用JupyterWith框架在Nix OS上定义声明性和可复制的Jupyter环境。根据文档,我创建了shell.nix文件,在其中定义了所有的Python依赖项。它工作得很好:

let
  jupyter = import (builtins.fetchGit {
    url = https://github.com/tweag/jupyterWith;
    rev = "37cd8caefd951eaee65d9142544aa4bd9dfac54f";
  }) {};

  iPython = jupyter.kernels.iPythonWith {
    name = "python";
    packages = p: with p; [
      pandas
      numpy
      seaborn
      matplotlib
      scikitlearn
      # prophet
    ];
  };

  iHaskell = jupyter.kernels.iHaskellWith {
    extraIHaskellFlags = "--codemirror Haskell";
    name = "haskell";
    packages = p: with p; [ hvega formatting ];
  };

  jupyterEnvironment =
    jupyter.jupyterlabWith {
      kernels = [ iPython iHaskell ];
    };
in
  jupyterEnvironment.env

但是,当我添加prophet包作为另一个python依赖项时,问题就出现了。在此之后,当我尝试运行nix-shell时,我得到以下错误:

jbezdek@kraken:~$ nix-shell ~/shell.nix.jupyter
error: undefined variable 'prophet' at /home/jbezdek/shell.nix.jupyter:15:7
(use '--show-trace' to show detailed location information)

你能告诉我我做错了什么吗?

efzxgjgh

efzxgjgh1#

在我看来,你没做错什么。prophet的问题更多的是隐藏的。您可以与Nix一起使用的Python包不是在PyPI上找到的(通过某种镜像),而是包源本身的Nix派生。这意味着要使一个包能够与Nix一起使用,需要有人为此编写一个合适的派生。
标准nixpkgs-unstable和稳定通道上的所有可用软件包都可以在search.nixos.org上搜索和找到。当您在这里输入prophet时,您不会在python3Packages包集下找到它,这意味着还没有人为它编写派生。因此,最好的办法是开始编写自己的派生(参见手册),或者在GitHub repo上进行包请求。

zzzyeukh

zzzyeukh2#

你可以使用mach-nix从pypi中拉取依赖项。下面是我使用的shell.nix模板:

with (import <nixpkgs> { });
let
  mach-nix = import (builtins.fetchGit {
    url = 'https://github.com/DavHau/mach-nix';
    ref = 'refs/tags/3.5.0';
  }) { };
  built-in-reqs = builtins.readFile ./requirements.txt;
  python = mach-nix.mkPython {
    requirements = built-in-reqs + ''
    '';
  };
in mach-nix.nixpkgs.mkShell {

  buildInputs = [ python ];
}

相关问题