我使用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)
你能告诉我我做错了什么吗?
2条答案
按热度按时间efzxgjgh1#
在我看来,你没做错什么。
prophet
的问题更多的是隐藏的。您可以与Nix一起使用的Python包不是在PyPI上找到的(通过某种镜像),而是包源本身的Nix派生。这意味着要使一个包能够与Nix一起使用,需要有人为此编写一个合适的派生。标准
nixpkgs-unstable
和稳定通道上的所有可用软件包都可以在search.nixos.org上搜索和找到。当您在这里输入prophet
时,您不会在python3Packages
包集下找到它,这意味着还没有人为它编写派生。因此,最好的办法是开始编写自己的派生(参见手册),或者在GitHub repo上进行包请求。zzzyeukh2#
你可以使用mach-nix从pypi中拉取依赖项。下面是我使用的
shell.nix
模板: