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

如何用Nix Flake创建等价于python main.py的可执行文件

解决Nix构建Python可执行文件的问题

错误原因

  1. 引入了poetry2nix.mkPoetryApplication但项目未使用Poetry管理依赖,缺少poetry.lock文件导致构建失败。
  2. 首次配置的App使用了未包含依赖的原始Python解释器,运行时无法找到pandas等模块。

修正后的flake.nix配置

{
  description = "virtual environment with python and streamlit";
  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.python311;
        # 定义包含依赖的Python环境
        pythonWithDeps = python.withPackages(ps: with ps; [
          ipython
          matplotlib
          pandas
        ]);
        myDevTools = [
          pythonWithDeps
          pkgs.streamlit
        ];
        # 封装可执行脚本,调用带依赖的Python执行main.py
        myApp = pkgs.writeScriptBin "my-python-app" ''
          #!${pkgs.bash}/bin/bash
          exec ${pythonWithDeps}/bin/python ${self}/main.py "$@"
        '';
      in {
        devShells.default = pkgs.mkShell {
          buildInputs = myDevTools;
        };
        # 设置默认构建产物为我们的可执行程序
        packages.default = myApp;
        # 配置App指向可执行文件,支持nix run直接启动
        apps.default = flake-utils.lib.mkApp {
          program = "${myApp}/bin/my-python-app";
        };
      });
}

用法说明

  • 构建可执行文件:执行nix build,当前目录会生成result符号链接,运行./result/bin/my-python-app即可执行main.py,所有依赖已被正确包含。
  • 直接运行程序:执行nix run,无需提前构建即可直接启动main.py。

内容的提问来源于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.07.17 22:09:55