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
'';
});
};
};
}
我需要配置 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
'';
});
};
};
}