当前位置:网站首页>打包项目上传到PyPI
打包项目上传到PyPI
2022-08-02 14:14:00 【程序员小小度】
背景
之前分享的dubbo接口测试工具,需要起个后端服务,以接口的形式进行测试dubbo接口,但是部署服务需要服务器资源,部分公司服务器资源不足,为此,将之前的dubbo接口测试工具打包成一个包,直接python代码调用即可~
创建项目
- 目录结构
.
├── LICENSE
├── README.md
├── dubborequests
│ ├── __init__.py
│ ├── api.py
│ ├── config.py
│ └── util.py
└── setup.py
- README.md
关于项目的描述文件,大概内容就是怎么安装,怎么使用
- LICENSE
开源License,如MIT,Apache license 2.0等等,这里我选择了MIT。关于使用说明可参考:Choose an open source license 一般GitHub创建仓库可以进行选择LICENSE

用来描述项目,打包的时候用到这个文件。里面描述写着项目名字,项目版本,依赖哪些库,支持的Python版本,支持的操作系统
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name="dubborequests",
version="0.3",
author="fang",
author_email="[email protected]",
description="Telnet command test dubbo",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/JokerChat/dubbo_requests",
packages=setuptools.find_packages(),
python_requires='>=3.7.0',
install_requires=['kazoo'],
license='MIT',
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
)
- name 项目(命名项目时, 要看看PyPi是否存在同名的项目)
- version 项目的版本号, 后续代码改动了, 需要更新版本号, PyPi只允许一个版本存在
- author 作者名
- author_email 邮箱地址
- description 项目的简短描述信息
- long_description 项目的详细描述信息, 会显示在PyPi项目描述页面
- long_description_content_type 用于指定long_description的标记类型,上面的例子是markdown
- url 一般是项目的仓库地址
- packages 指定最终发布的包中要包含的packages。上面的setuptools.find_packages()会自动搜索项目根目录下的所有packages
- install_requires 项目依赖于哪些库, 这些库都会在pip install时自动安装
- license 选择的开源License类型
- classifiers 其他信息,一般包括项目支持的Python版本,License,支持的操作系统
打包项目
- 打包项目需要安装setuptools和wheel
pip install setuptools
pip install wheel
- 运行下面的命令打包
python setup.py sdist bdist_wheel
# 稳妥起见, 直接使用python3
python3 setup.py sdist bdist_wheel
这里有个坑, 要看下你本地python指向2还是3, 如果用了python2来打包, 打包出来的whl包无法安装在python3里
- 打包成功
打包成功后, 项目底下会生成这几个目录
dist目录下会存在tar.gz的源码包和xxx.whl的Wheel包。
- 验证是否能安装
pip install dist/dubborequests-0.3-py3-none-any.whl

- 测试包功能
# 导入
import dubborequests
from dubborequests.config import Config
Config.zookeeper_url_list = ['192.168.240.15:2181', '192.168.240.15:2182', '192.168.240.15:2183']
# 获取dubbo服务详情
data = dubborequests.search('cn.com.xxx.sso.ehr.api.dubbo.SsoEmpInfoService')
# 详细示例可以看README.md
发布项目到PyPI
先在PyPI注册用户pypi register
使用twine上传项目, 先安装twine
pip install twine
- 执行命令将打包好的库上传
twine upload dist/*

- 上传成功后PyPI即可看到项目文档
可能存在的踩坑点
- pip install dubborequests无法找到这个库

解决:
pip install dubborequests -i https://pypi.org/simple
原因:国内镜像地址暂未同步该库
- 重复上传

这里原因是重复上传了同一个库了, 如果确实需要上传, setup.py 更新一下版本号即可

- 项目名重名无法上传
# 截取了知乎的某一段, https://zhuanlan.zhihu.com/p/106166278
HTTPError: 403 Client Error: The credential associated with user 'jinhang' isn't allowed to upload to project 'pypi'. See https://pypi.org/help/#project-name for more information. for url: https://upload.pypi.org/legacy/
这个没遇到过, 原因是跟别人的项目名重复, setup.py 改一下项目名即可

边栏推荐
猜你喜欢

change the available bandwidth of tcp flow dynamically in mininet

【solidity智能合约基础】节约gas的利器--view和pure

Evaluation multipath weswood congestion control on ns3

十天学习Unity3D脚本(一)九个回调

锥形相位掩模的Talbot图像

记一次 ThreadLocal 泄漏导致的 shardingsphere-jdbc-core 单元测试偶发失败的排查与修复

2021-06-06

基类和派生类的关系【继承】/多态和虚函数/【继承和多态】抽象类和简单工厂

Unity中事件的3种实现方法

光波导k域布局可视化(“神奇的圆环”)
随机推荐
剑指offer:合并两个排序的链表
面试汇总
Qt | 实现一个简单的可以转动的仪表盘
剑指offer:数值的整数次方
Unity-PlayMaker
嵌入式学习硬件篇------初识ARM
lua编程
shader 和 ray marching
TypeScript
Vert.x web 接收请求时反序列化对象 Failed to decode 如何解决?
计算机网络中的安全(一)网络安全的概念与加密原理
富文本编辑
shader入门精要2
类模板/赋值运算和加等运算
优先级表和Ascll表
char array/string array|array pointer/pointer array/
Redis 学习part one
在mininet中测试arp欺骗
LeetCode 2343. 裁剪数字后查询第 K 小的数字 暴力+语法考察
flex布局