当前位置:网站首页>打包项目上传到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 改一下项目名即可
边栏推荐
猜你喜欢
随机推荐
EastWave:垂直腔表面激光器
OpenPose Basic Philosophy
unity Domain Reload & scene Reload 静态变量重置
tpproxy-tcp透明代理
flex布局
记一次 ThreadLocal 泄漏导致的 shardingsphere-jdbc-core 单元测试偶发失败的排查与修复
Unity-3D数学
shader入门精要2
Unity-Ads广告插件
2021-06-06
idea同时修改相同单词
golang-reflect-method-callback
OpenPose 运行指令 ([email protected])
px和em和rem的区别
Vert.x web 接收请求时反序列化对象 Failed to decode 如何解决?
【进程间通信】:管道通信/有名/无名
泰伯效应.
在mininet中测试arp欺骗
golang内存相关文章-收集
shader入门精要3