Pypi配置API Token
技术背景
在许久之前写的一篇博客中,我们介绍过使用twine向pypi上传我们自己的开源包的方法。最近发现这个方法已经不再支持了(报错信息如下所示),现在最新版需要使用API Token进行文件上传,这里大致介绍一下配置的方法。
$ python3 setup.py check
$ python3 setup.py sdist bdist_wheel
$ twine upload --repository-url https://upload.pypi.org/legacy/ dist/*
Uploading distributions to https://upload.pypi.org/legacy/
Enter your username: dechin
Enter your password:
Uploading hadder-3.4-py3-none-any.whl
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 22.0k/22.0k [00:01<00:00, 20.9kB/s]
Error during upload. Retry with the --verbose option for more details.
HTTPError: 403 Forbidden from https://upload.pypi.org/legacy/
Username/Password authentication is no longer supported. Migrate to API Tokens or Trusted Publishers instead. See https://pypi.org/help/#apitoken and https://pypi.org/help/#trusted-publishers
Pypi主页登录
因为许久没有登录,所以很多人登录Pypi主页的时候可能需要添加一下双因子认证:
点击这个生成覆盖码的按钮,会生成一系列的一次性覆盖码,建议保存到本地:
这个覆盖码,是用来修改账号配置的,跟我们上传whl包没有关系。但是每修改一次账号配置,就会使用一个覆盖码。然后选择继续:
我们选择一个覆盖码输入,用于配置双因子认证:
双因子认证模式有两种,一种是应用认证,一种是设备认证,这里如果使用使用的是Win11操作系统,可以选择设备认证,然后用Windows Hello进行认证:
点击设定设备:
这样就完成了Pypi账号登录和双因子认证的安全设定。
API Token获取
在登录Pypi主页之后,在账号设定界面往下拉,找到API tokens选项
选择添加API token,可以给这个token设定一个专门的用途名称,还可以分仓库管理token。不过这里我为了方便,直接统一使用一个token进行上传:
然后就会生成一个token:
配置API Token
其实官方推荐的方法是把Token保存到~/.pypirc文件里面去,像这个样子:
但是不知为何,在我的环境下这个方法不奏效。尝试过在twine upload的时候把配置文件也加上,但还是不起作用,有知道的高手可以方便评论区告知一下原因。最后我使用的是keyring配置的方法(keyring是安装twine的时候一起安装了,不需要自己再去手动安装):
$ keyring set https://upload.pypi.org/legacy/ __token__
Password for '__token__' in 'https://upload.pypi.org/legacy/':
账号名就是__token__,密码就是那一串token复制粘贴进来。最后,还是成功的完成了upload:
$ twine upload --repository-url https://upload.pypi.org/legacy/ dist/*
Uploading distributions to https://upload.pypi.org/legacy/
Uploading hadder-3.4-py3-none-any.whl
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 22.0k/22.0k [00:02<00:00, 8.98kB/s]
Uploading hadder-3.4.tar.gz
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 22.5k/22.5k [00:01<00:00, 14.9kB/s]
View at:
https://pypi.org/project/hadder/3.4/
总结概要
这篇文章介绍了新版Pypi上传Python编译后的whl包的操作流程,主要内容为登录设置双因子认证,以及获取API Token并使用token上传whl包的方法。
版权声明
本文首发链接为:https://www.cnblogs.com/dechinphy/p/pypi-api.html
作者ID:DechinPhy
更多原著文章:https://www.cnblogs.com/dechinphy/
请博主喝咖啡:https://www.cnblogs.com/dechinphy/gallery/image/379634.html
Pypi配置API Token的更多相关文章
- 微信企业号C#开发配置API
微信开发第一步 : 配置API,实现接收消息服务配置 1.在下图界面先填好内容,事件消息处理可自行选择,我这里是没处理的 2.第二步: 使用vs 进行代码的编写,以下是我的代码.LogTextHe ...
- 怎么查找Jenkins的个人api token
程序中可变部分解释:其中server.build_job方法传入的参数channel为分渠道构建参数,也即jenkins job的参数,这个参数随不同的日常job不同是不同的,实际编写脚本的过程中这个 ...
- ELASTIC 动态修改配置API
工作中使用ELASTIC,我们常有需要修改的配置项,但有时又不想重启elastic,这时候就需要elasticsearch内置的修改集群配置API上场了. 这个API非常的简单. curl -XPUT ...
- 错误: No API token found for service account "default",
[root@kubernetes-master pods]# kubectl create -f mysql.yaml Error from server (ServerTimeout): error ...
- Yii2 的快速配置 api 服务 yii2-fast-api
yii2-fast-api yii2-fast-api是一个Yii2框架的扩展,用于配置完善Yii2,以实现api的快速开发. 此扩展默认的场景是APP的后端接口开发,因此偏向于实用主义,并未完全采用 ...
- 6.1Hadoop属性Configuration配置API
6.1 Hadoop属性配置API Hadoop需要添加一些自定义的属性值,可以通过Configuration类的实例来加载xml配置文件中的属性值. (1) xml配置文件的格式 <?x ...
- http request 请求拦截器,有token值则配置上token值
// http request 请求拦截器,有token值则配置上token值 axios.interceptors.request.use( config => { if (token) { ...
- 使用配置 API配置注入(Container stand-alone API)
当使用API配置注时,它可以通过成员注入重写默认的注入规则: 使用注入成员(InjectionMember)时,如对属性注入可以用InjectionProperty等,可以通过指定名称来指定使用哪个具 ...
- API token for Github
1.如图所示:(前提是登录Github,进入Personal settings) 2,创建token 3,生成token 4. Last login: Mon Dec 5 20:24:18 on c ...
- SpringSecurityOAuth认证配置及Token的存储
⒈pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
随机推荐
- 定了!航天科技AIRIOT 物联网平台新品发布会,6月6日北京见!
AIRIOT新品发布会预告 航天科技定档6月6日举办AIRIOT新品发布会,诚邀大家共同见证4.0版本的创新与赋能! 活动地点:北京雍和航星科技园. 现场参会请通过下方长图二维码进行报名! 亦可预约直 ...
- 拼接sql 参数化 where userId in(@userIds)的问题
这里@userIds 如果 写成101,202,301翻译后的sql的where部分会是: where userId in('101,202,301'): 而不是期待的: where userId i ...
- Supervisor 守护进程管理工具
引言 Supervisor 是基于 Python 编程语言开发的一套通用的进程管理程序,它是通过 fork/exec 的方式把需要管理的进程作为子进程来管理. 安装 pip3 安装 superviso ...
- Django 视图views的基本使用
在 Django 中,视图函数是一个 Python 函数或者类,开发者主要通过编写视图函数来实现业务逻辑.视图函数首先接受来自浏览器或者客户端的请求,并最终返回响应,视图函数返回的响应可以是 HTML ...
- Android 13 - Media框架(5)- NuPlayerDriver
关注公众号免费阅读全文,进入音视频开发技术分享群! 前面的章节中我们了解到上层调用setDataSource后,MediaPlayerService::Client(IMediaPlayer)会调用M ...
- webview2 示例 Samples Selenium
https://github.com/MicrosoftEdge/WebView2Samples https://learn.microsoft.com/zh-cn/microsoft-edge/we ...
- UILabel的DrawDrect方法
一.问题 如果继承UILabel实现自己的一个Label,并且在子类的DrawRect方法中留空,什么都不写,会发生什么? 代码如下: VC @interface ViewController () ...
- 深入解读Prometheus Adapter:云原生监控的核心组件
本文详述了Prometheus Adapter的部署与配置,通过三个实践案例展示其在Kubernetes环境中的应用,帮助用户实现基于自定义指标的自动扩展和跨集群统一监控. 关注作者,分享AI全维度知 ...
- k8s中查看pod的yaml文件的案例
在Kubernetes (K8s) 中,Pod 的 YAML 文件定义了 Pod 的配置和规格.当你想要查看 Pod 的 YAML 文件参数参考时,通常是为了了解可以配置哪些字段以及这些字段的含义. ...
- nodejs koa框架下载和导入excel
ac.js const service = require("../service/model.service"); const urlencode = require(" ...