为Nix fetchpypi配置私有PyPI仓库URL的最佳方式
使用Nix fetchpypi访问私有PyPI仓库及自定义配置方案
访问私有PyPI仓库的最佳方式
直接在fetchpypi调用中指定url字段,跳过默认的地址生成逻辑,直接给出私有仓库的包下载链接。如果私有仓库需要身份认证,可通过extraHeaders添加认证头(比如Bearer Token或Basic Auth)。示例代码:
src = fetchPypi { pname = "your-private-package"; version = "1.0.0"; url = "https://your-private-pypi.com/packages/your-private-package-1.0.0.tar.gz"; sha256 = "sha256-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; # 如需认证,添加请求头 extraHeaders = { Authorization = "Bearer your-private-repo-token"; }; };
这种方式针对单包配置,灵活度高,适合只拉取个别私有包的场景。
覆盖computeSourceUrl指定自定义仓库基础URL
fetchpypi允许调用时重新定义computeSourceUrl参数,替换默认的地址生成逻辑。你可以根据私有仓库的包路径规则,编写自定义的地址生成函数。示例:
src = fetchPypi rec { pname = "your-package"; version = "1.0.0"; sha256 = "sha256-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; # 自定义地址生成逻辑,适配私有仓库路径 computeSourceUrl = pname: version: _: "https://your-private-pypi.com/packages/source/${builtins.substring 0 1 pname}/${pname}/${pname}-${version}.tar.gz"; };
这里的函数接收pname、version、sha256三个参数(最后一个参数如果用不到可以用下划线忽略),返回你需要的私有仓库包地址。
覆盖mirrors://镜像设置
可以覆盖。默认的computeSourceUrl使用mirrors://pypi/...格式的镜像地址,你只需要在调用fetchpypi时重新定义computeSourceUrl,完全替换默认逻辑即可。比如要切换到自定义公共镜像,示例代码:
src = fetchPypi rec { pname = "deserialize"; version = "1.8.3"; sha256 = "sha256-0aozmQ4Eb5zL4rtNHSFjEynfObUkYlid1PgMDVmRkwY="; # 替换为自定义镜像的地址生成逻辑 computeSourceUrl = pname: version: _: "https://your-public-mirror.com/pypi/packages/source/${builtins.substring 0 1 pname}/${pname}/${pname}-${version}.tar.gz"; };
这种方式会完全绕过默认的PyPI镜像列表,使用你指定的源地址。
内容的提问来源于stack exchange,提问作者ciferkey
相关产品推荐
相关产品推荐

