You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在configuration.nix中注册Python模块?解决akshare安装报错

问题

需要在NixOS中安装系统级Python模块akshare,该模块不在Nixpkgs中,仅能从PyPI获取。尝试在my-python-packages中声明该模块并加入configuration.nix的environment.systemPackages,配置如下:

let
  my-python-packages = ps: with ps; [
    # ...
    (
      buildPythonPackage rec {
        pname = "akshare";
        version = "1.10.57";
        src = fetchPypi {
          inherit pname version;
          sha256 = "72b339e19d507c32193ad490ef19cf6692d82eecb7445e3567d4b2ed5ffa90e1";
        };
        doCheck = true;
        propagatedBuildInputs = [
          # Specify dependencies
          pkgs.python311Full.withPackages(ps: with ps; [ numpy ])
        ];
      }
    )
  ];
in
{
  // other configs ...
  environment.systemPackages = with pkgs; [
    # Other system packages
    podman-desktop
    (python311Full.withPackages(ps: with ps; [ pandas requests polars numpy]++ my-python-packages))
    rargs
    redis
    ripgrep
  ];
  # Other configuration options
  # ...
}

重建系统时返回错误:

error: value is a function while a list was expected

       at /nix/store/61k92av6g5yb3hg29ijjiahj06hp0h56-source/configuration.nix:360:44:

          359|   podman-desktop
          360|   (python311Full.withPackages(ps: with ps; [ pandas requests polars numpy]++ my-python-packages))
             |                                            ^
          361|   rargs
(use '--show-trace' to show detailed location information)
修复方法

错误源于两个问题:

  1. my-python-packages是接收ps参数的函数,直接用++拼接会把函数当成列表元素,导致类型不匹配,必须调用my-python-packages ps获取实际包列表。
  2. propagatedBuildInputs中不应使用pkgs.python311Full.withPackages,需直接传入当前Python环境下的依赖包(即ps.numpy),否则会引入独立Python环境引发依赖冲突。

正确配置代码如下:

let
  my-python-packages = ps: with ps; [
    # ...
    (
      buildPythonPackage rec {
        pname = "akshare";
        version = "1.10.57";
        src = fetchPypi {
          inherit pname version;
          sha256 = "72b339e19d507c32193ad490ef19cf6692d82eecb7445e3567d4b2ed5ffa90e1";
        };
        doCheck = true;
        # 直接使用当前Python环境的numpy,避免创建独立环境
        propagatedBuildInputs = with ps; [ numpy ];
        # 可选:若akshare测试环节报错,可关闭检查
        # doCheck = false;
      }
    )
  ];
in
{
  // other configs ...
  environment.systemPackages = with pkgs; [
    podman-desktop
    # 调用my-python-packages并传入当前ps参数,拼接有效包列表
    (python311Full.withPackages(ps: with ps; [ pandas requests polars numpy ] ++ my-python-packages ps))
    rargs
    redis
    ripgrep
  ];
  # Other configuration options
  # ...
}

内容的提问来源于stack exchange,提问作者Arthur Zhang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 12:55:37