使用Nix Flake安装jina-hubble-sdk遇PermissionError问题求助
解决Nix Flake构建jina-hubble-sdk时的/homeless-shelter权限错误
问题根源是Nix构建沙箱中默认HOME指向无写入权限的/homeless-shelter,而jina-hubble-sdk的测试环节尝试向该目录写入数据,触发权限拒绝错误。以下是两种可行解决方案:
方案1:禁用包的测试环节(推荐)
直接跳过测试阶段,避免写入HOME目录的操作,修改jina-hubble-sdk的buildPythonPackage配置:
jina-hubble-sdk = with pkgs.python3Packages; buildPythonPackage rec { pname = "jina-hubble-sdk"; version = "0.39.0"; src = pkgs.fetchPypi { inherit pname version; sha256 = "9021417794a6d3cf3fad8a880cf668a3a986b9d53d5be5fa391aae1767a5b9b0"; }; # 添加这行禁用测试 doCheck = false; nativeBuildInputs = [ setuptools wheel # 补充构建依赖,确保包能正确编译安装 ]; propagatedBuildInputs = [ requests aiohttp rich importlib-metadata filelock pathspec docker pyyaml python-jose ]; };
说明:
doCheck = false:跳过测试阶段,彻底避免测试代码访问HOME目录- 补充
setuptools wheel到nativeBuildInputs:部分Python包需要这些工具完成构建流程,避免潜在的安装失败
方案2:修改测试阶段的HOME路径
如果需要保留测试,可在测试前将HOME临时设置为有写入权限的TMPDIR:
jina-hubble-sdk = with pkgs.python3Packages; buildPythonPackage rec { pname = "jina-hubble-sdk"; version = "0.39.0"; src = pkgs.fetchPypi { inherit pname version; sha256 = "9021417794a6d3cf3fad8a880cf668a3a986b9d53d5be5fa391aae1767a5b9b0"; }; # 测试前设置HOME为临时目录 preCheck = '' export HOME=$TMPDIR ''; nativeBuildInputs = [ setuptools wheel ]; propagatedBuildInputs = [ requests aiohttp rich importlib-metadata filelock pathspec docker pyyaml python-jose ]; };
说明:preCheck钩子会在测试执行前运行,将HOME环境变量替换为Nix提供的临时目录(有写入权限),让测试代码可以正常执行。
完整修改后的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}; # Define Python package 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"; }; doCheck = false; nativeBuildInputs = [ setuptools wheel ]; propagatedBuildInputs = [ requests aiohttp rich importlib-metadata filelock pathspec docker pyyaml python-jose ]; }; # Define Python environment with necessary packages pythonEnv = pkgs: pkgs.python3.withPackages (ps: with ps; [ jina-hubble-sdk # Include jina in the environment ]); in { devShells.default = pkgs.mkShell { buildInputs = with pkgs; [ curl (pythonEnv pkgs) ]; }; }); }
修改完成后,重新运行nix develop即可完成构建。
内容的提问来源于stack exchange,提问作者Pierre-olivier Gendraud
相关产品推荐
相关产品推荐

