Azure DevOps Server 的连接源(Artifacts):六、发布python程序(Twine pip)
1. 发布Python程序包
一般我们都是用Twine作为Python程序包的发布工具,这个工具比较简单,只需要在用户主目录中配置.pypirc文件,指定私服地址即可,下面是一个简单的示例。
1.1 在用户主目录(C:\users\devservice)中创建一个文件.pypirc,内容如下
[distutils] index-servers = local [local] repository: http://localhost:8081/artifactory/api/pypi/pypi-local username: admin password: password
1.2 发布程序包
从github下载一套示例代码https://github.com/pypa/sampleproject,或者使用自己的python项目,运行打包和上传目录
python setup.py install python setup.py sdist build twine upload dist/*
我们可以在Azure DevOps Server的连接源中看到发布的包文件:
2. 常见问题
问题1:.pypirc文件不生效
问题描述
创建了文件C:\users\devservice.pypirc文件,使用twine upload 命令,没有连接文件中指定的私服,总是去连接官网的服务器
[distutils] index-servers = local [local] repository: http://localhost:8081/artifactory/api/pypi/pypi-local username: admin password: password
解决方案
参考:https://twine.readthedocs.io/en/latest/#environment-variables
在服务器上创建了两个环境变量,指向DevOps Server的连接源:
- TWINE_REPOSITORY
- http://ads2/DefaultCollection/_packaging/a1/pypi/upload
问题2:上传总提示冲突conflict
从github下载了一套示例代码https://github.com/pypa/sampleproject
使用命令编译、上传,总提示冲突:
python setup.py install python setup.py sdist build twine upload dist/*
解决方案:
不知道为什么已经存在一个同名的模块,将setup.py中的名称修改一下,再python setup.py sdist build,上传,成功了
问题 3. 上传来源于 pypi.org/project 的包,提示冲突
- 从https://pypi.org/project/microsoft/#files 下载一个文件
- 使用命令twine upload .\microsoft-0.1.2-py2.py3-none-any.whl,系统提示冲突
解决方案:
再上传命令后面添加参数--verbose,系统返回信息
{"$id":"1","innerException":null,"message":"不能将“Flask 2.0.0”发布到该源,因为它至少在该源的一个上游源中存在。发布此副本将阻止你使用“PyPI”中的“Flask 2.0.0 ”。有关详细信息,请参阅 https://go.microsoft.com/fwlink/?linkid=864880","typeName":"Microsoft.VisualStudio.Services.Packaging.Shared.WebApi.Exceptions.PackageAl readyExistsException, Microsoft.VisualStudio.Services.Packaging.Shared.WebApi","typeKey":"PackageAlreadyExistsException","errorCode":0,"eventId":3000} HTTPError: 409 Conflict from http://ads2/DefaultCollection/_packaging/a1/pypi/upload
这下明白原因了,原因是我从pipy.org中下载的包,不能使用这种方式上传,必须从上游源中下载安装
3. 相关文章
- Azure DevOps Server 的连接源(Artifacts):一、概述
- Azure DevOps Server 的连接源(Artifacts):二、nuget包管理
- Azure DevOps Server 的连接源(Artifacts):三、从Artifacts中下载Nuget包
- Azure DevOps Server 的连接源(Artifacts):四、python基础(Django、Flask)
- Azure DevOps Server 的连接源(Artifacts):五、python包管理pip和twine
- Azure DevOps Server 的连接源(Artifacts):六、发布python程序(Twine pip)
- Azure DevOps Server 的连接源(Artifacts):七、从Artifact中下载python程序包
- Azure DevOps Server 的连接源(Artifacts):八、NPM 基础知识
- Azure DevOps Server 的连接源(Artifacts):九、npm发布和安装包
- Azure DevOps Server 的连接源(Artifacts):十、vue示例和自动打包(npm node)
如果需要,你还可以从微软Azure DevOps Server 的在线文档,查询更多的权威资料,也欢迎通过下面的联系方式与我沟通,相互学习,相互提高!
https://www.cnblogs.com/danzhang
Azure DevOps MVP 张洪君