用Uv2nix构建私有仓库Python项目:private-deps实战指南

📅 2026/8/24 8:10:06
用Uv2nix构建私有仓库Python项目:private-deps实战指南
用Uv2nix构建私有仓库Python项目private-deps实战指南【免费下载链接】uv2nixUv2nix - Ingest uv workspaces using Nix [maintaineradisbladis]项目地址: https://gitcode.com/gh_mirrors/uv/uv2nixUv2nix 是一个用 Nix 动态接管 uv 工作区的工具它能帮你把私有仓库的 Python 依赖也纳入 Nix 的可复现构建体系。本指南基于项目官方文档doc/src/patterns/private-deps.md用 4 个步骤带你跑通私有依赖 沙箱构建的完整流程新手也能照着做。为什么需要 Uv2nix 处理私有依赖Uv2nix 从 uv 的uv.lock读取依赖并通过 nixpkgs 的pkgs.fetchurl下载源码包。关键点在于天然继承 nixpkgs 的认证能力fetchurl 支持 Basic Auth因此私有 PyPI 索引Artifactory、AWS CodeArtifact、私有 GitLab 等都能被拉取但默认不自动使用凭据在 Nix 沙箱里你必须显式告诉 fetchurl 去哪读账号密码这就需要下面介绍的四步配置。 一句话总结Uv2nix 负责解析锁文件、生成派生包认证部分由netrc文件 overlay 覆盖来完成。如何配置私有依赖4步上手第 1 步在 pyproject.toml 中声明私有索引告诉 uv 私有包来自哪个索引并用explicit true避免它抢走所有依赖的解析[[tool.uv.index]] name my-index url https://pypi-proxy.fly.dev/basic-auth/simple explicit true [tool.uv.sources] iniconfig { index my-index }之后正常执行uv lock生成uv.lock即可。第 2 步创建 netrc 凭据文件按照官方文档约定把凭据保存到/etc/nix/netrcmachine pypi-proxy.fly.dev login public password heron在开发 shell 中导出环境变量让工具链能找到它export NETRC/etc/nix/netrc⚠️ 注意这个文件必须只包含服务器主机名 账号 密码主机名要与私有索引的域名完全一致。第 3 步用 overlay 覆盖私有包的 srcfetchurl 不会默认读 netrc所以要在 flake 里对私有包做overrideAttrs把 curl 参数和证书验证打开iniconfig prev.iniconfig.overrideAttrs(old: { src old.src.overrideAttrs(_: { curlOpts --netrc-file /etc/nix/netrc; SSL_CERT_FILE ${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt; }); });两个细节值得记住curlOpts指向你的 netrc 文件认证才真正生效SSL_CERT_FILE是必须的——Nix 默认为了可复现性会跳过 TLS 证书校验但传输凭据时绝不能省务必启用证书验证。完整的 overlay 写法可参考模板templates/hello-world/flake.nix中mkPyprojectOverlay的组合方式。第 4 步带沙箱路径执行构建凭据文件要送进构建沙箱才能被 fetchurl 读取nix build -L -v --option extra-sandbox-paths /etc/nix/netrc 执行成功后私有依赖就被以可复现的方式下载并安装进产物里了。持久化配置让构建开箱即用每次手动加--option extra-sandbox-paths太麻烦。团队使用时建议写入nix.confextra-sandbox-paths /etc/nix/netrc这样任何nix build命令都能自动携带凭据CI 流水线也能直接复用。常见问题速查 问题解决方法认证失败 / 401检查 netrc 的machine是否与索引域名逐字一致TLS 证书报错确认 overlay 中设置了SSL_CERT_FILE构建仍拉不到包确认构建命令带了extra-sandbox-paths不确定 overlay 是否生效用nix build -L -v观察 curl 输出小结用 Uv2nix 构建私有仓库 Python 项目核心就是三件套netrc 存凭据 → overlay 挂认证 → 沙箱路径放行。配置一次之后所有依赖更新都自动享受 Nix 的哈希锁定与可复现构建。更多细节如 patching 依赖、源过滤等高级模式可继续浏览项目文档目录doc/src/patterns/测试样例在lib/fixtures/中均有覆盖。【免费下载链接】uv2nixUv2nix - Ingest uv workspaces using Nix [maintaineradisbladis]项目地址: https://gitcode.com/gh_mirrors/uv/uv2nix创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考