Python 在 Nix 生成的 Python 环境中找不到模块

Python module not found in Nix-generated Python environment

我需要配置 Python 和 beancount 模块的用户环境。我目前这样做的方式是将这个包添加到 home.packages (我正在使用 home-manager):

(python310.withPackages (_: [ python310Packages.beancount ]))

这给了我 Python 3.10,但在尝试 import beancount 时,我得到 ModuleNotFoundError.

我以这种方式而不是 (python-packages: with python-packages; [ beancount ]) 调用 withPackages 的原因是因为我覆盖了 beancount 模块。我在 Apple Silicon 系统上,在 aarch64-darwin 上构建 beancount 时遇到问题,所以我只使用 x86_64-darwin 版本,效果很好。这是通过以下两个叠加层完成的:

(final: prev: (optionalAttrs (prev.stdenv.system == "aarch64-darwin") {
  pkgs-x86 = import nixpkgs-unstable {
    system = "x86_64-darwin";
      inherit (nixpkgsConfig) config;
    };
}))

(final: prev: (optionalAttrs (prev.stdenv.system == "aarch64-darwin") {
  python310Packages.beancount = final.pkgs-x86.python310Packages.beancount;
}))

我怀疑我调用 withPackages 的方式是包未添加到 Python 环境的原因,但我不确定是否属于这种情况。无论哪种方式,我将如何解决这个问题?

我在某处读到 withPackages 从 PyPi 获取包。有没有办法强制在这里使用 x86_64-darwin ?或者,有没有办法手动将模块添加到 Nix 的 Python 环境?

请查看 https://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks/python.section.md#overriding-python-packages-overriding-python-packages 如何覆盖 python 包。

我前段时间使用的覆盖示例:

final: prev: {
  python3 = prev.python3.override {
    packageOverrides = final: prev: {
      python-swiftclient = prev.python-swiftclient.overrideAttrs (oldAttrs: rec {
        postInstall = ''
          install -Dm644 tools/swift.bash_completion $out/share/bash_completion.d/swift
        '';
      });
    };
  };
}