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

如何用uv publish替代Twine完成Python包上传?

解决方案

核心思路是跳过uv publish默认的build环节,直接上传已通过原有流程构建好的包文件,彻底绕开私有仓库权限导致的依赖解析错误。

步骤1:保留原有build流程

继续使用你原本的命令完成包构建,确保项目根目录下的dist文件夹生成了.whl和.tar.gz格式的包文件:

uv build

步骤2:用uv直接上传已构建的包

不需要在pyproject.toml中全局配置私有索引(避免干扰build阶段的依赖拉取),通过以下方式指定上传目标和认证信息:

方式1:命令行直接指定(适合脚本或临时使用)

上传时通过参数明确Artifactory私有PyPI地址、用户名和密码:

uv publish --skip-build \
  --index https://your-artifactory-domain/api/pypi/your-pypi-repo-name \
  --username your-artifactory-account \
  --password your-artifactory-token-or-password

方式2:预存索引配置(适合长期使用)

在uv的全局配置文件中添加私有索引(Linux/macOS路径为~/.config/uv/config.toml,Windows为%APPDATA%\uv\config.toml):

[[publish.indexes]]
name = "artifactory-pypi"
url = "https://your-artifactory-domain/api/pypi/your-pypi-repo-name"
username = "your-artifactory-account"
password = "your-artifactory-token-or-password"

之后上传只需指定索引名称即可:

uv publish --skip-build --index artifactory-pypi

方式3:环境变量传递认证(更安全)

为避免明文暴露密码,通过环境变量传递认证信息:

export UV_PUBLISH_USERNAME=your-artifactory-account
export UV_PUBLISH_PASSWORD=your-artifactory-token-or-password

uv publish --skip-build --index https://your-artifactory-domain/api/pypi/your-pypi-repo-name

关键说明

  • --skip-build是核心参数:它会让uv跳过默认的build流程,直接读取dist目录下已生成的包文件上传,完全避免build阶段访问私有仓库拉取公共依赖(如setuptools)的权限问题。
  • 原有uv build流程不受任何影响,依然使用默认PyPI索引拉取build依赖,保持原有工作逻辑。

内容的提问来源于stack exchange,提问作者GhostCat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 00:04:57