ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

pixi upload 命令完全指南:向多类 Conda 通道发布包

pixi upload 命令完全指南:向多类 Conda 通道发布包 开发工具CLI包管理器任务调度【免费下载链接】pixiPowerful system-level package manager for Linux, macOS and Windows written in Rust – building on top of the Conda ecosystem.项目地址https://gitcode.com/gh_mirrors/pi/pixi点击查看免费下载pixi upload是 pixi基于 Conda 生态、以 Rust 编写的跨平台包管理器中负责将 Conda 包发布到各类通道channel的核心命令支持 prefix.dev、Anaconda.org、Quetz、JFrog Artifactory、S3 及 Cloudsmith 六类服务器。读完本文你将掌握pixi upload的完整用法、六大子命令的参数细节、三种认证方式以及 S3 上传后的重新索引等实战要点。命令概览pixi upload能做什么pixi upload将本地构建好的 Conda 包.conda或.tar.bz2文件上传到各类通道服务器让其他用户可以通过pixi add、conda install等方式消费这些包。根据 CLI 参考文档命令本身支持以下服务器类型服务器类型说明prefix上传到 prefix.dev 或自托管实例anaconda上传到 Anaconda.orgquetz上传到 Quetz 服务器artifactory上传到 JFrog Artifactorys3上传到 S3 兼容对象存储cloudsmith上传到 Cloudsmith 仓库conda-forge通过--force等方式向 conda-forge 通道发布需相应权限说明官方 CLI 文档在“支持的服务器类型”中同时列出了prefix, anaconda, quetz, artifactory, s3, conda-forge而当前版本中实际可用的子命令还包括cloudsmith共 6 个子命令。核心调用链在源码中非常清晰CLI 入口在 crates/pixi_cli/src/lib.rs 将Command::Upload(cmd)分发给upload::execute(cmd)而 crates/pixi_cli/src/upload.rs 负责参数组装后最终调用rattler_upload::upload_from_args(opts).await完成真正的上传工作。全局用法与通用参数所有服务器类型共享同一个命令骨架pixi upload [OPTIONS] [PACKAGE_FILES]... COMMAND其中COMMAND是六类子命令之一PACKAGE_FILES是需要上传的包文件可一次传入多个May be provided more than once如package1.conda package2.conda package3.conda。通用参数详解参数说明环境变量备注--offlineOFFLINE无网络运行。上传必然需要网络因此该选项让pixi upload快速失败而不是尝试连接PIXI_OFFLINE取值y/yes/t/true/on/1真n/no/f/false/off/0假--allow-insecure-host ALLOW_INSECURE_HOST跳过 SSL 证书校验的主机列表可多次指定—仅在明确信任目标主机时使用--no-config不读取系统级或用户级配置文件但项目本地project/.pixi/config.toml仍会加载PIXI_NO_CONFIG默认false--config-file PATH从指定文件加载配置替代系统/用户级路径搜索项目本地配置仍会叠加合并PIXI_CONFIG_FILE—--offline的实现细节值得关注在 crates/pixi_cli/src/upload.rs 中execute首先判断args.offline.unwrap_or_else(|| config.offline())一旦判定为离线模式直接返回NetworkRequiredError错误并终止不会发起任何网络请求。这也是注释中强调的“定义在这里而非共享配置标志因为UploadOpts已经拥有--auth-file”的原因。六大子命令逐一详解1.pixi upload prefix上传到 prefix.devpixi upload prefix [OPTIONS] --channel CHANNEL参数说明环境变量默认值/约束--url (-u) URLprefix.dev 服务器地址仅自托管实例需要指定PREFIX_SERVER_URL默认https://prefix.dev--channel (-c) CHANNEL目标通道名PREFIX_CHANNEL必填--api-key (-a) API_KEYAPI Key未提供时从 keychain / auth-file 读取PREFIX_API_KEY—--attestation ATTESTATION随包上传一份 attestation签名证明文件。注意添加 attestation 时只能上传单个包与--generate-attestation互斥——--generate-attestation在 CI 中使用 cosign 自动生成 attestation与--attestation互斥——--store-github-attestation将生成的 attestation 同时存储到 GitHub 的 attestation API。需要GITHUB_TOKEN环境变量且仅在 GitHub Actions 中生效attestation 会关联当前仓库——--skip-existing (-s)包已存在时跳过上传——--force强制覆盖已存在的包—与--skip-existing语义相反prefix 子命令是唯一支持 attestation软件供应链签名能力的通道适合对包完整性要求高的发布场景。2.pixi upload anaconda上传到 Anaconda.orgpixi upload anaconda [OPTIONS] --owner OWNER参数说明环境变量约束--owner (-o) OWNER发行版所有者如 conda-forge 或你的用户名ANACONDA_OWNER必填--channel (-c) CHANNELS上传的通道 / label如 main / rc可多次指定ANACONDA_CHANNEL—--api-key (-a) API_KEYAnaconda API Key未提供时从 keychain / auth-file 读取ANACONDA_API_KEY—--url (-u) URLAnaconda 服务器地址ANACONDA_SERVER_URL默认指向官方服务--force (-f)冲突时替换已存在文件ANACONDA_FORCE—3.pixi upload quetz上传到 Quetz 服务器pixi upload quetz [OPTIONS] --url URL --channel CHANNELS参数说明环境变量约束--url (-u) URLQuetz 服务器地址QUETZ_SERVER_URL必填--channel (-c) CHANNELS通道地址QUETZ_CHANNEL必填--api-key (-a) API_KEYQuetz API Key未提供时从 keychain / auth-file 读取QUETZ_API_KEY—4.pixi upload artifactory上传到 JFrog Artifactorypixi upload artifactory [OPTIONS] --url URL --channel CHANNELS参数说明环境变量约束--url (-u) URLArtifactory 服务器地址ARTIFACTORY_SERVER_URL必填--channel (-c) CHANNELS通道地址ARTIFACTORY_CHANNEL必填--username USERNAME用于 HTTP 基本认证的用户名ARTIFACTORY_USERNAME—--password PASSWORD用于 HTTP 基本认证的密码ARTIFACTORY_PASSWORD—--token (-t) TOKEN用于 Bearer 认证的 tokenARTIFACTORY_TOKEN—Artifactory 的认证可以二选一直接提供 bearer token或用用户名 密码组合两者都不提供时从 keychain / auth-file 读取。5.pixi upload s3上传到 S3 兼容对象存储pixi upload s3 [OPTIONS] --channel CHANNEL参数说明环境变量默认值/约束--channel (-c) CHANNELS3 桶内的通道 URL如s3://my-bucket/my-channelS3_CHANNEL必填--force文件已存在时替换——--endpoint-url ENDPOINT_URLS3 后端端点地址S3_ENDPOINT_URL对接 MinIO、Cloudflare R2 等兼容存储时必填--region REGIONS3 后端区域S3_REGION—--access-key-id ACCESS_KEY_ID访问密钥 IDS3_ACCESS_KEY_ID—--secret-access-key SECRET_ACCESS_KEY秘密访问密钥S3_SECRET_ACCESS_KEY—--session-token SESSION_TOKEN会话令牌临时凭证场景S3_SESSION_TOKEN—--addressing-style ADDRESSING_STYLE桶寻址方式S3_ADDRESSING_STYLE默认virtual-host可选virtual-host、path6.pixi upload cloudsmith上传到 Cloudsmith 仓库pixi upload cloudsmith [OPTIONS] --owner OWNER --repo REPO参数说明环境变量约束--owner (-o) OWNERCloudsmith 仓库的所有者命名空间CLOUDSMITH_OWNER必填--repo (-r) REPOCloudsmith 仓库名CLOUDSMITH_REPO必填--api-key (-a) API_KEYAPI Key未提供时从 keychain / auth-file 读取CLOUDSMITH_API_KEY—--url (-u) URLCloudsmith API 服务器地址CLOUDSMITH_API_URL—认证机制三种方式任选其一对于大多数服务器类型认证可以通过以下三种途径提供按官方文档 upload_extender 整理1. Keychain / auth-file推荐先用pixi auth login将凭证存入 keychain 或 auth-file后续上传命令自动读取pixi auth login https://prefix.dev --token $MY_TOKEN pixi upload prefix --channel my-channel my_package.conda2. 环境变量每种服务器类型支持对应的环境变量便于 CI 流水线中注入凭证PREFIX_API_KEYprefix.devANACONDA_API_KEYAnaconda.orgQUETZ_API_KEYQuetzARTIFACTORY_TOKENArtifactoryS3_ACCESS_KEY_ID、S3_SECRET_ACCESS_KEYS33. 命令行参数直接通过--api-key、--token等参数传入凭证。认证读取的底层实现在 crates/pixi_cli/src/upload.rsexecute通过get_auth_store(config)获取认证存储尊重authentication_override_file配置再通过opts.with_auth_store(Some(auth_storage))注入到上传选项中最终交给rattler_upload::upload_from_args使用。这意味着文档中提到的pixi auth login与这里的 auth store 是同一套凭证体系详见 pixi auth 文档 与 pixi auth login。实战示例六类通道的上传命令以下示例全部取自官方 upload_extender 文档可直接复制运行。上传到 prefix.dev# 上传包到 prefix.dev 的通道 pixi upload prefix --channel my-channel my_package-1.0.0-h123abc_0.conda # 使用显式 API Key pixi upload prefix --channel my-channel --api-key $PREFIX_API_KEY my_package.conda # 包已存在则跳过上传 pixi upload prefix --channel my-channel --skip-existing my_package.conda上传到 Anaconda.org# 上传到个人通道 pixi upload anaconda --owner my-username my_package.conda # 上传到指定 label / channel pixi upload anaconda --owner my-username --channel dev my_package.conda # 强制替换已存在的包 pixi upload anaconda --owner my-username --force my_package.conda上传到 S3# 使用环境中的 AWS 凭证上传到 S3 桶 pixi upload s3 --channel s3://my-bucket/my-channel my_package.conda # 显式指定凭证 pixi upload s3 \ --channel s3://my-bucket/my-channel \ --region us-east-1 \ --access-key-id $AWS_ACCESS_KEY_ID \ --secret-access-key $AWS_SECRET_ACCESS_KEY \ my_package.conda # 上传到 S3 兼容存储MinIO、Cloudflare R2 等 pixi upload s3 \ --channel s3://my-bucket/my-channel \ --endpoint-url https://minio.example.com \ --region us-east-1 \ --addressing-style path \ my_package.conda # 强制替换已存在的包 pixi upload s3 --channel s3://my-bucket/my-channel --force my_package.conda注意--addressing-style path是接入 MinIO 等非 AWS 兼容存储时的关键参数因为这类服务通常要求路径式寻址而非默认的虚拟主机式寻址。上传到 Quetz# 上传到 Quetz 服务器 pixi upload quetz \ --url https://my-quetz-server.com \ --channel my-channel \ my_package.conda # 使用显式 API Key pixi upload quetz \ --url https://my-quetz-server.com \ --channel my-channel \ --api-key $QUETZ_API_KEY \ my_package.conda上传到 Artifactory# 上传到 Artifactory pixi upload artifactory \ --url https://my-artifactory.com \ --channel conda-local \ my_package.conda # 使用显式 token pixi upload artifactory \ --url https://my-artifactory.com \ --channel conda-local \ --token $ARTIFACTORY_TOKEN \ my_package.conda一次上传多个包所有服务器类型都支持一次上传多个包pixi upload prefix --channel my-channel package1.conda package2.conda package3.condaS3 特殊处理上传后的重新索引S3 本质上是对象存储而非包服务器上传包之后repodata.json不会自动更新需要手动重新索引否则客户端无法在通道中解析到新上传的包。官方文档 S3 部署指南 明确指出每次向包仓库上传新包后都必须更新repodata.json。推荐使用rattler-indexconda-forge 上可用配合pixi exec完成索引pixi exec rattler-index s3 s3://my-bucket/my-channel \ --endpoint-url https://my-s3-host \ --region us-east-1这样pixi upload s3rattler-index就构成了一条完整可用的 S3 通道发布流水线先上传.conda包再重新生成repodata.json供客户端解析。从源码看pixi upload的执行流程upload.rs 完整展示了pixi upload的执行流程可以帮助你理解命令的设计取舍加载配置Config::load_global_with(args.config_source.source())读取全局配置受--no-config、--config-file影响。离线快速失败--offline或配置文件中的 offline 设置为真时直接返回NetworkRequiredError不发起任何网络请求——这与“上传必然需要网络”的设计意图一致。获取认证存储get_auth_store(config)按 pixi 的认证体系读取 keychain / auth-file。组装上传选项args.upload_opts.with_auth_store(Some(auth_storage))将凭证注入rattler_upload::upload::opt::UploadOpts。执行上传rattler_upload::upload_from_args(opts).await完成实际上传这一层由 rattler_upload crate 实现支持前文所述的全部服务器类型与认证方式。从源码结构看pixi upload本身并不包含上传逻辑而是薄封装了rattler_upload库CLI 层pixi_cli负责解析参数、管理配置与认证协议与传输层由 rattler_upload 承担。这种分层让新通道类型的接入只需扩展 rattler_upload 侧的能力即可。常见问题与使用建议认证失败时如何排查优先确认pixi auth login已成功写入凭证或对应的环境变量PREFIX_API_KEY、ANACONDA_API_KEY等是否正确设置注意 CLI 参数优先级高于环境变量与 auth-file。--force与--skip-existing的取舍重复发布场景建议用--skip-existing保证幂等需要覆盖旧版本时用--force两者不应同时使用。自托管服务器别忘了--urlprefix、quetz、artifactory 都支持自托管实例此时必须显式传入服务器 URLprefix 的--url默认值仅为官方https://prefix.dev。S3 通道发布后必须 re-index这是新手最容易遗漏的一步否则新包对客户端不可见。GitHub Actions 发布prefix 子命令的--generate-attestation与--store-github-attestation专为 CI 签名场景设计可结合 GitHub 的 attestation API 形成可审计的供应链发布流程。赞分享开发工具CLI包管理器任务调度【免费下载链接】pixiPowerful system-level package manager for Linux, macOS and Windows written in Rust – building on top of the Conda ecosystem.项目地址https://gitcode.com/gh_mirrors/pi/pixi点击查看免费下载相关推荐claude-mem Worker 重启治理以单一事实来源消灭版本回环与 EADDRINUSE 风暴claude mem Worker 重启治理以单一事实来源消灭版本回环与 EADDRINUSE 风暴 导读 claude mem 通过一个常驻的 worker开发工具CLI包管理器任务调度pixi 使用 prefix.dev 搭建 Conda 私有频道从频道创建到可信发布Trusted Publishing全流程指南pixi 使用 prefix.dev 搭建 Conda 私有频道从频道创建到可信发布Trusted Publishing全流程指南 prefix.dev开发工具CLI包管理器任务调度使用 Pixi 将 ROS 包构建为 conda 包pixi-build-ros 后端实战指南使用 Pixi 将 ROS 包构建为 conda 包pixi build ros 后端实战指南 本文讲解如何在 Pixi基于 Conda 生态的 Rust开发工具CLI包管理器任务调度上一篇Larastan 测试用例扩展如何深度分析 Laravel 测试代码的终极指南下一篇告别扫描痛点zxing-android-embedded的BarcodeCallback高级用法解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表