簡體   English   中英

如果不在 nixpkgs 中,如何將 python 包添加到 shell.nix?

[英]How can I add a python package to a shell.nix, if it's not in nixpkgs?

我有一個用於 Python 開發的 shell.nix,如下所示:

with import <nixpkgs> {};

((
python37.withPackages (ps: with ps; [
  matplotlib
  spacy
  pandas
  spacy_models.en_core_web_lg
  plotly
])).override({ignoreCollisions=true; })).env

它適用於這些包。 問題是,我也想使用colormath ,它似乎不在 nixpkgs 中。 我怎樣才能導入那個包?

我可以用pypi2nix -V python3 -e colormath生成一個requirements.nix ,我嘗試用這樣的東西導入它:

with import <nixpkgs> {};

let colormath = import ./requirements.nix { inherit pkgs; }
in ((
python37.withPackages (ps: with ps; [
  matplotlib
  spacy
  ...
  colormath
])).override({ignoreCollisions=true; })).env

編輯: 這是 requirements.nix 輸出的要點

我還嘗試制作一個 python 包 nix 表達式,就像在 Nixpkgs 中一樣,它似乎構建正常:

{ buildPythonPackage
, fetchPypi
, networkx
, numpy
, lib
, pytest
}:

buildPythonPackage rec {
  pname = "colormath";
  version = "3.0.0";

  src = fetchPypi {
    inherit version;
    inherit pname;
    sha256 = "3d4605af344527da0e4f9f504fad7ddbebda35322c566a6c72e28edb1ff31217";
  };

  checkInputs = [ pytest ];

  checkPhase = ''
    pytest
  '';

  # Tests seem to hang
  # doCheck = false;

  propagatedBuildInputs = [ networkx numpy ];

  meta = {
    homepage = "https://github.com/gtaylor/python-colormath";
    license = lib.licenses.bsd2;
    description = "Color math and conversion library.";
  };
}

(我什至為此提出了拉取請求。)但我只是不知道如何將其導入到我的開發環境中。

我還是下班了有沒有一種簡單的方法來組合 nixpkgs 和非 nixpkgs python 模塊?

我確實解決了類似的問題:

with import <nixpkgs> {};

( let
    colormath = pkgs.python37Packages.buildPythonPackage rec {
      pname = "colormath";
      version = "3.0.0";

      src = pkgs.python37Packages.fetchPypi{
        inherit version;
        inherit pname;
        sha256 = "05qjycgxp3p2f9n6lmic68sxmsyvgnnlyl4z9w7dl9s56jphaiix";
      };

      buildInputs = [ pkgs.python37Packages.numpy pkgs.python37Packages.networkx ];
    };

  in pkgs.python37.buildEnv.override rec {
    extraLibs = [
      pkgs.python37
      pkgs.python37Packages.matplotlib
      pkgs.python37Packages.spacy
      pkgs.python37Packages.pandas
      pkgs.python37Packages.spacy_models.en_core_web_lg
      pkgs.python37Packages.plotly
      colormath
    ];
  }
).env

可能有改進的余地,但這對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM