如何用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
相关产品推荐
相关产品推荐

