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

解决WSL上Nix构建因Windows换行符导致的失败问题

问题描述

在WSL上运行NixOS,使用nix 2.18.1版本,在包含如下flake.nix的目录执行nix develop时构建失败。

所用flake.nix代码

{
 description = "Python environment with ollama";

 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};
      
      jina-hubble-sdk = with pkgs.python3Packages;
        buildPythonPackage rec {
          pname = "jina-hubble-sdk";
          version = "0.39.0";

          src = pkgs.fetchPypi {
            inherit pname version;
            sha256 = "9021417794a6d3cf3fad8a880cf668a3a986b9d53d5be5fa391aae1767a5b9b0";
          };

          nativeBuildInputs = [
            poetry-core
            pkgs.dos2unix # Add dos2unix to convert line endings
          ];

          propagatedBuildInputs = [
            pep517
            pip
            requests
            aiohttp
            rich
            importlib-metadata
            filelock
            pathspec
            docker
            pyyaml
            python-jose
          ];
          

          # Convert line endings to Unix-style
          preConfigure = ''
            export HOME=$(mktemp -d)
          '';
             # put this code inside preConfigure if you want to run it dos2unix -f /nix/store/v099hqvw5z87423p4hz1vfhzaqa07dii-stdenv-linux/setup
        };
   
      pythonEnv = pkgs:
        pkgs.python3.withPackages (ps:
          with ps; [
             jina-hubble-sdk
          ]);
    in {
      devShells.default = pkgs.mkShell {
        buildInputs = with pkgs; [
          curl
          ollama
          (pythonEnv pkgs)
        ];
      };
    });
}

报错信息

error: builder for
'/nix/store/dm6cxw020s7whbfgqj8jivd3dv1pby0i-python3.11-jina-hubble-sdk-0.39.0.drv'
failed with exit code 127;
last 10 log lines:
> Using setuptoolsCheckPhase
> Running phase: unpackPhase
> unpacking source archive /nix/store/9q6b5l6955sabgvk8ah5xx0sfji25zmn-jina-hubble-sdk-0.39.0.tar.gz
> source root is jina-hubble-sdk-0.39.0
> setting SOURCE_DATE_EPOCH to timestamp 1688549032 of file jina-hubble-sdk-0.39.0/setup.cfg
> Running phase: patchPhase
> Running phase: updateAutotoolsGnuConfigScriptsPhase
> Running phase: configurePhase
> /nix/store/v099hqvw5z87423p4hz1vfhzaqa07dii-stdenv-linux/setup: line
114: $'\r': command not found
> /nix/store/v099hqvw5z87423p4hz1vfhzaqa07dii-stdenv-linux/setup: line
131: pop_var_context: head of shell_variables not a function context
For full logs, run 'nix-store -l /nix/store/dm6cxw020s7whbfgqj8jivd3dv1pby0i-python3.11-jina-hubble-sdk-0.39.0.drv'.
error: 1 dependencies of derivation
'/nix/store/25gl4f29rr56ci1h5k53wmm7wgfmk2p2-python3-3.11.8-env.drv'
failed to build error: 1 dependencies of derivation
'/nix/store/pxkgnl5nx66fcdi1rkvz86kbfrvlmhn2-nix-shell-env.drv' failed
to build

关键错误行:

/nix/store/v099hqvw5z87423p4hz1vfhzaqa07dii-stdenv-linux/setup: line 114: $'\r': command not found

已尝试方法

推测是Linux与Windows换行符差异导致,尝试在preConfigure中添加dos2unix -f /nix/store/v099hqvw5z87423p4hz1vfhzaqa07dii-stdenv-linux/setup,但无效果。

解决方法
  1. 修复本地flake.nix文件的换行符
    先确保你的flake.nix文件本身使用Unix换行符(LF),在WSL中执行:

    dos2unix flake.nix
    
  2. 在Python包构建阶段转换源码中的换行符
    修改jina-hubble-sdk的preConfigure脚本,转换源码目录下所有可执行脚本和文本文件的换行符,而不是修改Nix的stdenv脚本(该路径每次构建都会变化,且属于Nix内部文件):

    preConfigure = ''
      export HOME=$(mktemp -d)
      # 转换源码中所有shell脚本、Python文件、配置脚本的换行符为Unix格式
      find . -type f \( -name "*.sh" -o -name "*.py" -o -name "setup" -o -name "configure" -o -name "*.cfg" \) -exec dos2unix {} +
    '';
    
  3. 完整修改后的jina-hubble-sdk部分

    jina-hubble-sdk = with pkgs.python3Packages;
      buildPythonPackage rec {
        pname = "jina-hubble-sdk";
        version = "0.39.0";
    
        src = pkgs.fetchPypi {
          inherit pname version;
          sha256 = "9021417794a6d3cf3fad8a880cf668a3a986b9d53d5be5fa391aae1767a5b9b0";
        };
    
        nativeBuildInputs = [
          poetry-core
          pkgs.dos2unix # 保留dos2unix依赖
        ];
    
        propagatedBuildInputs = [
          pep517
          pip
          requests
          aiohttp
          rich
          importlib-metadata
          filelock
          pathspec
          docker
          pyyaml
          python-jose
        ];
    
        preConfigure = ''
          export HOME=$(mktemp -d)
          # 转换源码中相关文件的换行符
          find . -type f \( -name "*.sh" -o -name "*.py" -o -name "setup" -o -name "configure" -o -name "*.cfg" \) -exec dos2unix {} +
        '';
      };
    

执行以上修改后,重新运行nix develop即可解决换行符导致的构建错误。

内容的提问来源于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.27 10:47:03