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

使用Nix Flake安装pyecharts失败,报错缺少simplejson依赖

问题排查:Nix构建pyecharts时提示simplejson依赖缺失

问题描述

我使用的flake.nix配置如下:

{   
  description = "";  
  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";   
  inputs.flake-utils.url = "github:numtide/flake-utils"; 
  outputs = { self, nixpkgs, flake-utils }:    
    flake-utils.lib.eachDefaultSystem (system:      
      let        
        pkgs = nixpkgs.legacyPackages.${system};        
        python = pkgs.python312;        
        pyecharts = with pkgs.python3Packages;          
          buildPythonPackage rec {            
            pname = "pyecharts";            
            version = "2.0.6";            
            src = pkgs.fetchPypi {              
              inherit pname version;              
              sha256 = "4d7f8dcbee1525a6eeecab589efcdbe939feee4c46930d90b2734bff04077ecc";            
            };        
        };        
        python_packages = python.withPackages(ps: with ps;[          
          ipython          
          pyecharts          
          streamlit         
        ]);        
        myDevTools = [          
          python_packages        
        ];      
      in {        
        devShells.default = pkgs.mkShell {          
          buildInputs = myDevTools;           
        };      
      }); 
}

运行nix develop命令后,构建/nix/store/5cmw2nmna4fwc3jsqqmi6rspkvvsbmkq-python3.12-pyecharts-2.0.6.drv失败,报错提示pkg_resources.DistributionNotFound: The 'simplejson' distribution was not found and is required by the application。执行nix log查看完整日志后仍无法理解问题原因,请求协助排查。

解决方案

问题核心是你手动定义的pyecharts包未声明依赖项。pyecharts 2.0.6需要simplejson作为运行时依赖,但你的buildPythonPackage配置里没有添加这个依赖,导致构建过程中找不到它。

方案一:手动补充依赖

修改flake.nix中pyecharts的定义,添加依赖声明:

{   
  description = "";  
  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";   
  inputs.flake-utils.url = "github:numtide/flake-utils"; 
  outputs = { self, nixpkgs, flake-utils }:    
    flake-utils.lib.eachDefaultSystem (system:      
      let        
        pkgs = nixpkgs.legacyPackages.${system};        
        python = pkgs.python312;        
        pyecharts = with pkgs.python3Packages;          
          buildPythonPackage rec {            
            pname = "pyecharts";            
            version = "2.0.6";            
            src = pkgs.fetchPypi {              
              inherit pname version;              
              sha256 = "4d7f8dcbee1525a6eeecab589efcdbe939feee4c46930d90b2734bff04077ecc";            
            };
            # 添加运行时依赖声明
            propagatedBuildInputs = [ simplejson ];
            # 若pyecharts还有其他依赖(如jinja2等),需一并补充
        };        
        python_packages = python.withPackages(ps: with ps;[          
          ipython          
          pyecharts          
          streamlit         
        ]);        
        myDevTools = [          
          python_packages        
        ];      
      in {        
        devShells.default = pkgs.mkShell {          
          buildInputs = myDevTools;           
        };      
      }); 
}

方案二:直接使用nixpkgs内置的pyecharts包

更简单的方式是放弃手动构建,直接用nixpkgs中已维护好的pyecharts包,它会自动处理所有依赖:

{   
  description = "";  
  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";   
  inputs.flake-utils.url = "github:numtide/flake-utils"; 
  outputs = { self, nixpkgs, flake-utils }:    
    flake-utils.lib.eachDefaultSystem (system:      
      let        
        pkgs = nixpkgs.legacyPackages.${system};        
        python = pkgs.python312;        
        python_packages = python.withPackages(ps: with ps;[          
          ipython          
          pyecharts  # 直接使用nixpkgs内置包,依赖自动处理
          streamlit         
        ]);        
        myDevTools = [          
          python_packages        
        ];      
      in {        
        devShells.default = pkgs.mkShell {          
          buildInputs = myDevTools;           
        };      
      }); 
}

关键说明

  • 手动构建Python包时,必须显式声明所有依赖:运行时依赖用propagatedBuildInputs,构建时依赖用buildInputs。
  • 优先使用nixpkgs中已有的包,这类包已经完成了依赖梳理和验证,能避免手动维护依赖的繁琐问题。

内容的提问来源于stack exchange,提问作者Pierre-olivier Gendraud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:18:08