Nix中imperative安装geopandas成功,declarative配置遇阻及频道切换需求
解决Nix下Declarative配置Python环境并设置默认频道为nixpkgs-unstable
第一步:将当前用户的默认频道切换为nixpkgs-unstable
先确认你当前的频道配置,运行:
nix-channel --list
如果当前用户的频道是旧的nixpkgs(对应稳定版),先移除它:
nix-channel --remove nixpkgs
然后添加nixpkgs-unstable作为默认频道:
nix-channel --add https://nixos.org/channels/nixpkgs-unstable nixpkgs
最后更新频道索引:
nix-channel --update
验证是否生效:运行以下命令,应该会输出unstable的版本标识(比如24.05pre...):
nix-instantiate --eval -E '<nixpkgs>.version'
第二步:Declarative配置包含geopandas的Python环境
下面提供两种常用的方式,根据你的使用场景选择:
方式1:使用Home Manager(推荐,适合持久化用户级环境)
如果你已经在使用Home Manager,修改你的~/.config/home-manager/home.nix,添加一个定制的Python3.6环境:
home.packages = [ # 定义包含geopandas的Python3.6环境 (pkgs.python36.withPackages (ps: with ps; [ geopandas # 这里可以添加其他你需要的Python库,比如numpy、matplotlib等 ])) ];
如果需要精确指定geopandas 0.3.0版本(确保和你之前imperative安装的版本一致),可以覆盖包属性:
home.packages = [ (pkgs.python36.withPackages (ps: with ps; [ (geopandas.overrideAttrs (oldAttrs: rec { version = "0.3.0"; src = oldAttrs.src.override { inherit version; # 替换为对应版本的sha256哈希值,你可以从之前安装的包信息中获取,或者用nix-prefetch-url计算 sha256 = "0000000000000000000000000000000000000000000000000000"; }; })) # 其他依赖库 ])) ];
修改完成后,应用配置:
home-manager switch
方式2:单独创建环境表达式(适合临时或独立环境)
创建一个名为my-geopandas-env.nix的文件,内容如下:
with import <nixpkgs> {}; # 构建包含geopandas的Python3.6环境 python36.withPackages (ps: [ ps.geopandas # 按需添加其他库 ])
然后用declarative方式安装这个环境:
nix-env -if my-geopandas-env.nix
这种方式会将这个定制的Python环境安装到你的用户环境中,后续可以通过nix-env -e python36-...移除,或者修改表达式后重新安装更新。
补充:系统级配置(如果需要全局可用)
如果你需要让这个Python环境在系统所有用户中可用,可以修改/etc/nixos/configuration.nix,先导入unstable频道,再添加到系统包:
let unstable = import <nixpkgs-unstable> {}; in { environment.systemPackages = [ unstable.python36.withPackages (ps: [ps.geopandas]) ]; }
然后运行sudo nixos-rebuild switch应用系统配置。
内容的提问来源于stack exchange,提问作者dmvianna
相关产品推荐
相关产品推荐

