NixOS中pkgs与python311Packages安装差异及Yapf依赖问题
NixOS中Yapf无法导入toml包的原因解析
问题场景
在NixOS中尝试安装Yapf时,最初使用以下配置:
environment.systemPackages = with pkgs; [ (python311.withPackages(ps: with ps; [ toml python-lsp-server pyls-isort flake8 ])) pkgs.yapf ];
运行yapf autoapp.py时触发错误:
$ yapf autoapp.py
yapf: toml package is needed for using pyproject.toml as a configuration file
解决方法
将Yapf加入到python311.withPackages的包列表中后,问题解决:
environment.systemPackages = with pkgs; [ (python311.withPackages(ps: with ps; [ toml python-lsp-server pyls-isort flake8 yapf ])) ];
原因说明
NixOS对Python环境做了严格的隔离:
- 第一种配置里,
pkgs.yapf是独立的系统包,它运行在Nixpkgs默认的Python环境中,和你用python311.withPackages创建的自定义Python环境完全分离。 - 你安装的
toml包只存在于那个自定义的python311环境里,Yapf所在的默认环境根本看不到这个包,所以会提示缺少toml。 - 把Yapf加入到同一个
withPackages列表后,它就和toml处于同一个隔离的python311环境中,自然能正常导入依赖的toml包了。
内容的提问来源于stack exchange,提问作者Harm
相关产品推荐
相关产品推荐

