如何将Python包发布到PyPI上,使用pip安装自己的库
如何发布自己的第三方库
- 1. PyPi的用途
- 2.Python包发布步骤
- 2.1 创建目录结构
- 2.2 准备文件
- 1、README.rst
- 2、LICENSE.txt,创建许可证
- 3、setup.py文件
- 4.克隆setup.py仓库(推荐)
- 2.3 编写核心代码
- 2.4 生成分发档案
- 2.5 发布包到PyPi
- 3.验证发布PYPI成功
1. PyPi的用途
Python中我们经常会用到第三方的包,默认情况下,用到的第三方工具包基本都是从Pypi.org里面下载。
2.Python包发布步骤
2.1 创建目录结构
创建一个测试项目,例如project_demo,在该项目下,创建一个待发布的包目录,例如:package_mikezhou_talk,并在该project_demo目录下,依次创建:setup.py、LICENSE、README.rst几项文件,此时目录结构为:
➜ AI_project tree -L 2
.
├── LICENSE
├── README.rst
├── package_mikezhou_talk
│ └── __init__.py
└── setup.py1 directory, 4 files
2.2 准备文件
接下来我们来逐一编写除了代码以外的文件。
1、README.rst
关于项目的描述文件,一般包含怎样安装项目,怎样使用项目等。markdown 语法可以参考 https://rest-sphinx-memo.readthedocs.io/en/latest/ReST.html
打开README.rst并输入以下内容。可以自定义此项,放入一些对项目的介绍。
# Example Package
This is a simple example package. You can use[联系作者](1035959050@qq.com)to write your content.
2、LICENSE.txt,创建许可证
上传到Python Package Index的每个包都包含许可证,这一点很重要。这告诉用户安装你的软件包可以使用您的软件包的条款。开源License,有如MIT,Apache license 2.0等。有关选择许可证的帮助,请访问https://choosealicense.com/。选择许可证后,打开 LICENSE并输入许可证文本
3、setup.py文件
setup.py是setuptools的构建脚本,用来描述项目,打包的时候会用到这个文件。它告诉PyPI我们的项目叫什么名字,是什么版本,依赖哪些库,支持哪些操作系统,可以在哪些版本的Python上运行,等等。
标准脚本示例:
from distutils.core import setup
from setuptools import find_packageswith open("README.rst", "r") as f:long_description = f.read()setup(name='package_mikezhou_talk', # 包名version='1.0.0', # 版本号description='A small example package',long_description=long_description,author='mikezhou_talk',author_email='762357658@qq.com',url='https://mp.weixin.qq.com/s/9FQ-Tun5FbpBepBAsdY62w',install_requires=[],license='BSD License',packages=find_packages(),platforms=["all"],classifiers=['Intended Audience :: Developers','Operating System :: OS Independent','Natural Language :: Chinese (Simplified)','Programming Language :: Python','Programming Language :: Python :: 2','Programming Language :: Python :: 2.7','Programming Language :: Python :: 3','Programming Language :: Python :: 3.5','Programming Language :: Python :: 3.6','Programming Language :: Python :: 3.7','Programming Language :: Python :: 3.8','Topic :: Software Development :: Libraries'],)
重要参数说明:
- name:项目的名称,name是包的分发名称。
- version:项目的版本。需要注意的是,PyPI上只允许一个版本存在,如果后续代码有了任何更改,再次上传需要增加版本号
- author和author_email:项目作者的名字和邮件, 用于识别包的作者。
- description:项目的简短描述克隆克隆setup.py仓库(推荐)
- long_description:项目的详细描述,会显示在PyPI的项目描述页面。必须是rst(reStructuredText) 格式的
- packages:指定最终发布的包中要包含的packages。
- install_requires:项目依赖哪些库,这些库会在pip install的时候自动安装
- classifiers:其他信息,一般包括项目支持的Python版本,License,支持的操作系统。
4.克隆setup.py仓库(推荐)
如果你觉得手写setup.py脚本文件难度大太,给你推荐另外一个简易方法。
大名鼎鼎的requests库的作者大神kennethreitz为大家准备了一个仓库作为一个setup.py的很好的模板,当然你也可以自己手写setup.py。克隆setup.py仓库(推荐)
如果你觉得手写setup.py脚本文件难度大太,给你推荐另外一个简易方法。
大名鼎鼎的requests库的作者大神kennethreitz为大家准备了一个仓库作为一个setup.py的很好的模板,当然你也可以自己手写setup.py。
2.3 编写核心代码
接下来我们就可以编写自己的代码了,要注意源代码文件夹(仓库里的package_mikezhou_talk包目录)的名字与setup.py里配置的包名(Name)要一致。
这一部内容,就根据各自的需求,自行实现即可。例如:我在示例package_mikezhou_talk包目录下,新建了一个main.py文件,在该文件下实现待实现的功能。
- 示例:
import itertoolscase_list = ['用户名', '密码']
value_list = ['正确', '不正确', '特殊符号', '超过最大长度']def gen_case(item=case_list, value=value_list):'''输出笛卡尔用例集合'''for i in itertools.product(item, value):print('输入'.join(i))def test_print():print("欢迎搜索关注公众号: 「测试开发技术」!")if __name__ == '__main__':test_print()
2.4 生成分发档案
下一步是为包生成分发包。这些是上传到包索引的档案,可以通过pip安装。
确保您拥有setuptools并wheel 安装了最新版本:
python3 -m pip install --user --upgrade setuptools wheel
生成这前,可以先运行python setup.py check检查setup.py是否有错误,如果没报错误,则进行下一步输出一般是running check。
1、准备好上面的步骤, 一个包就基本完整了, 剩下的就是打包了,可以使用下面命令打包一个源代码的包:
python setup.py sdist build
这样在当前目录的dist文件夹下, 就会多出一个tar.gz结尾的包了:
2、也可以打包一个wheels格式的包, 使用下面的命令就可以了:
python setup.py bdist_wheel --universal
这样会在dist文件夹下面生成一个whl文件.
3、或者从setup.py位于的同一目录运行此命令:
python3 setup.py sdist bdist_wheel
上面的命令会在dist目录下生成一个tar.gz的源码包和一个.whl的Wheel包。
2.5 发布包到PyPi
1、接下来就是去https://pypi.org/account/register/注册账号,如果有账号的请忽略,记住你的账号和密码,后面上传包会使用。
2、接下来就是上传你的包了,这里使用twine上传。需要先安装twine(用 twine上传分发包,并且只有 twine> = 1.11.0 才能将元数据正确发送到 Pypi上)
pip install twine
3、安装完之后,运行下面的命令将库上传,上传包,期间会让你输入注册的用户名和密码
twine upload dist/*
输入 PyPI注册的用户名和密码。命令完成后,您应该看到与此类似的输出:
➜ twine upload dist/*
Uploading distributions to https://upload.pypi.org/legacy/
Enter your username: mikezhou_talk
Enter your password:
Uploading package_mikezhou_talk-1.0.0-py3-none-any.whl
100%|██████████████████████████████████████| 7.84k/7.84k [00:03<00:00, 2.29kB/s]
Uploading package_mikezhou_talk-1.0.0.tar.gz
100%|██████████████████████████████████████| 6.64k/6.64k [00:01<00:00, 6.05kB/s]View at:
https://pypi.org/project/package-mikezhou-talk/1.0.0/
上传完成后,我们的项目就成功地发布到PyPI了。
3.验证发布PYPI成功
上传完成了会显示success,我们直接可以在PyPI上查看.
您可以使用pip来安装包并验证它是否有效。创建一个新的virtualenv (请参阅安装包以获取详细说明)并从TestPyPI安装包:
python3 -m pip install --index-url https://test.pypi.org/simple/ package-mikezhou-talk
或
pip install package-mikezhou-talk -i https://www.pypi.org/simple/
如下图所示:图片
进入Python Shell验证结果如下:图片
至此,我们已经成功地将自己开发的Python程序发布到了PyPI,此时你,可以直接在你本地的环境通过pip命令安装示例中的package-mikezhou-talk这个包了。
相关文章:
如何将Python包发布到PyPI上,使用pip安装自己的库
如何发布自己的第三方库1. PyPi的用途2.Python包发布步骤2.1 创建目录结构2.2 准备文件1、README.rst2、LICENSE.txt,创建许可证3、setup.py文件4.克隆setup.py仓库(推荐)2.3 编写核心代码2.4 生成分发档案2.5 发布包到PyPi3.验证发布PYPI成功…...
【Git】git常用命令总结
简言 git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 里面有很多常用的命令语法,在此做一个常用命令总结记录,以备不时之需。 命令总结 由于git是基于linux开发的工具,所以有个特点&a…...
Cortex-M0中断控制和系统控制
目录1.NVIC和系统控制块特性2.中断使能和清除使能3.中断挂起和清除挂起4.中断优先级5.中断控制的通用汇编代码使能和禁止中断设置和清除中断挂起状态设置中断优先级6.异常屏蔽寄存器(PRIMASK)7.中断输入和挂起行为8.中断等待9.系统异常的控制寄存器10.系…...
科技云报道:2023,云计算的风向变了
科技云报道原创。 2022,是云计算的“分水岭”之年。 与前两年的火热相比,2022年云计算行业实属不太好过:阿里云一季度营收增速创出历史新低,腾讯云的市场份额也被后来者华为云反超,沦为第三。 在此情形下,…...
工程管理系统源码-专注项目数字化管理-工程管理
工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和查看用户角色 4、菜单管理:实现对系统菜单的增删改查操…...
Nacos详细使用操作文档(图文详细)
文章目录Nacos详细使用操作文档(图文详细)1、安装2、Nacos作为注册中心2.1、Nacos服务注册【ICRMS】2.2、Nacos 服务调用2.2.1、Feign 远程调用【Personnel】2.2.2)、RestTemplateRibbon 远程调用【Personnel】3、Nacos作为配置中心4、Nacos 命令空间5、Nacos配置文件参数详解N…...
如何评价2023年美赛ABC题目
A题 遭受干旱侵袭的植物群落 背景 不同种类的植物对压力的反应方式不同。例如,草原对干旱非常敏感。干旱发生的频率和严重 程度各不相同。大量的观察表明,不同物种的数量在植物群落如何适应连续几代的干旱周期中 起着重要作用。在一些只有一种植物的…...
Win10显示dds及tga缩略图
整理之前做游戏MOD时收集的模型资源,3D游戏模型的贴图文件格式基本都是dds或tga的,毕竟无损压缩、支持嵌入MipMap、带透明通道、可以被GPU硬解balabala...道理我都懂但这俩玩意系统根本直接查看不了,就算装上专门的看图软件或插件,文件夹视图下也没有缩略图预览,只能一个个点开…...
Lesson5.1---Python 之 NumPy 简介和创建数组
一、NumPy 简介 NumPy(Numerical Python)是 Python 的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比 Python 自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示…...
Exchange 2013升级以及域名绑定等若干问题
环境简介Exchange 2013服务器位于ad域中,系统为Windows server 2012 R2,其内部域名为:mail.ad.com一. Exchange客户端无法在浏览器中正常运行在域中部署Exchange服务器后,除了可以通过outlook、foxmail等邮件客户端来使用邮箱功能…...
linux安装jenkins
1. 官网寻找安装方式 进入到jenkins官网,找到对应的下载页面:https://www.jenkins.io/download/ 根据自己系统还有想要使用的版本,进行选择即可。这里我们使用CentOS作为示例,版本选择长期支持版(LTS) 2.…...
【MySQL】MySQL表的增删改查(CRUD)
✨个人主页:bit me👇 ✨当前专栏:MySQL数据库👇 ✨算法专栏:算法基础👇 ✨每日一语:生命久如暗室,不碍朝歌暮诗 目 录🔓一. CRUD🔒二. 新增(Creat…...
GCC for openEuler 数据库性能优化实践
GCC for openEuler是基于开源GCC开发的编译器工具链(包含编译器,汇编器,链接器),在openEuler社区开源发布,并通过鲲鹏社区免费提供二进制包,支持aarch64处理器架构。 关键特性 支持鲲鹏微架构芯…...
【C++】类和对象(第二篇)
文章目录1. 类的6个默认成员函数2. 构造函数2.1 构造函数的引出2.2 构造函数的特性3. 析构函数3.1 析构函数的引出3.2 析构函数的特性4. 拷贝构造函数4.1 概念4.2 特性5.赋值运算符重载5.1 运算符重载概念注意练习5.2 赋值重载实现赋值重载的特性6. const成员函数7. 取地址及co…...
MySQL数据库(数据库约束)
目录 数据库约束 数据库约束的类型: null约束 : unique约束(唯一约束): default约束(默认值约束): primary key约束(主键约束): for…...
Hive的安装与配置
一、配置Hadoop环境先看看伪分布式下的集群环境有没有错误的情况:输入命令:start-all.sh jps查看伪分布式的所有进程是否完善二、解压并配置HiveHive压缩包→ https://pan.baidu.com/s/1eOF_ICZV8rV-CEh3nX-7Xw 提取码: m31e 复制这段内容后打开百度网盘…...
关于医院医用医疗隔离电源系统应用案例的分析探讨
【摘要】:介绍该三级医院采用安科瑞医用隔离电源柜,使用落地式安装方式,从而实现将TN系统转化为IT系统,同时监测系统绝缘情况。 【关键词】医用隔离电源柜;IT系统;绝缘情况;中西医结合医院&…...
【LeetCode】剑指 Offer 07. 重建二叉树 p62 -- Java Version
题目链接:https://leetcode.cn/problems/zhong-jian-er-cha-shu-lcof/ 1. 题目介绍(07. 重建二叉树) 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的…...
ERROR 1114 (HY000): The table ‘tt2‘ is full
insert 操作时提示is full 问题原因 rootlocalhost 11:55:41 [t]>show table status from t like ‘tt2’ \G ; *************************** 1. row *************************** Name: tt2 Engine: MEMORY Version: 10 Row_format: Fixed Rows: 7056 Avg_row_length: 944…...
考了PMP证后工资大概是多少 ?(含pmp资料)
这个岗位的不同还有每个公司的薪资也是不一样的,具体的数字肯定是没有的,但大概的比例还是有的,据PMI调查,在获得PMP证书的人当中,在PMP认证一年后,年薪有所增长的比例为66%,上涨幅度主要集中在…...
基于国产龙芯 CPU 的气井工业网关研究与设计(一)
当前,我国气田的自动化控制程度还未完全普及,并且与世界已普及的气井站的自 动化程度也存在一定的差距。而在天然气资源相对丰富的国家,开采过程中设备研发资 金投入较大,研发周期较长,更新了一代又一代的自动化开采系…...
40/365 javascript 数据类型
1.数据类型 number类型:整数,小数都属于这一类,不具体区分 字符串:hello, "hello" 布尔类型:true,false 逻辑运算符: && || ! 比较运算符: : 类型不一致&#x…...
后勤管理系统—服务台管理功能
数图互通是一家IT类技术型软件科技公司,专业的不动产、工作场所、空间、固定资产、设备家具、设施运维及可持续性管理解决方案软件供应商。 一、后勤管理系统服务台管理功能包含: 1、专业自动化、集中管理的自助服务助理,随时响应服务请求。…...
Spring Boot 是什么,应该如何学习,有哪些优缺点
1、Spring Boot 是什么? Spring Boot是一个基于Spring框架的开源项目,它简化了Spring应用程序的开发过程,提供了一种快速、便捷、可扩展的方式来构建Spring应用程序。 Spring Boot通过自动化配置机制简化了Spring应用程序的配置过程&#x…...
使用yolov5和强化学习训练一个AI智能欢乐斗地主(一)
这里写自定义目录标题项目介绍项目过程介绍训练yolov5目标检测斗地主收集数据集yolov5调参项目介绍 你好! 欢迎阅读我的文章,本章将介绍,如何使用yolov5和强化学习训练一个AI斗地主,本项目将分为三个部分,其中包含&am…...
C++ 浅谈之 AVL 树和红黑树
C 浅谈之 AVL 树和红黑树 HELLO,各位博友好,我是阿呆 🙈🙈🙈 这里是 C 浅谈系列,收录在专栏 C 语言中 😜😜😜 本系列阿呆将记录一些 C 语言重要的语法特性 dz…...
【Kotlin】Kotlin函数那么多,你会几个?
目录标准函数letrunwithapplyalsotakeIftakeUnlessrepeat小结作用域函数的区别作用域函数使用场景简化函数尾递归函数(tailrec)扩展函数高阶函数内联函数(inline)inlinenoinlinecrossinline匿名函数标准函数 Kotlin标准库包含几个…...
饲养员喂养动物-课后程序(JAVA基础案例教程-黑马程序员编著-第四章-课后作业)
【案例4-2】饲养员喂养动物 记得 关注,收藏,评论哦,作者将持续更新。。。。 【案例目标】 案例描述 饲养员在给动物喂食时,给不同的动物喂不同的食物,而且在每次喂食时,动物都会发出欢快的叫声。例如&…...
数据分析:消费者数据分析
数据分析:消费者数据分析 作者:AOAIYI 创作不易,如果觉得文章不错或能帮助到你学习,记得点赞收藏评论一下哦 文章目录数据分析:消费者数据分析一、前言二、数据准备三、数据预处理四、个体消费者分析五、用户消费行为总…...
Transformer论文阅读:ViT算法笔记
标题:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 会议:ICLR2021 论文地址:https://openreview.net/forum?idYicbFdNTTy 文章目录Abstract1 Introduction2 Related Work3 Method3.1 Vision Transformer3.2…...
多人在线协作网站开发/网络广告宣传怎么做
1. 导读源于之前的一篇文章,盛夏计划: 助小白极简入坑数据分析, 这半个月多前,我吹下的牛,现在不睡觉也要把他撸完,你说对吧?。。虽然是极简教程,但是也会拆成几篇文章, 为什么&…...
泉州做网站/一个网站的seo优化有哪些
作者:Mizuhara链接:二分图匹配_牛客博客来源:牛客网二分图匹配匹配 (matching)(matching) 是指两两没有公共点的边集给出一个二分图,找一个边数最大的匹配。增广路:从一个未匹配点出发,依次经过未匹配边&am…...
学校网站建设作用/衡阳网站建设
前言 自定义 View 时Android 开发中的一个热点知识,我们结合源码了解绘制 View 的必备知识。 流程 measure 测量layout 位置draw 绘制 measure 测量 view 大小的测量是在 onMeasure 中实现的,测量过程用到了MeasureSpac,MeasureSpec是一…...
建筑工程 技术支持 东莞网站建设/石家庄seo顾问
crontab:建立定时任务,到时间自动执行,对应进程crond 注意: (1)定时任务与用户有关,每个用户只能看到自己的定时任务。如果要查看其他用户的定时任务,可以切换到对应用户或是使用s…...
微餐饮网站建设比较好/长沙网站搭建关键词排名
一、使用ByteBuffer.allocateDirect分配的off heap内存大小 本机进程 在Jvisualvm中安装 Mbeans插件。然后查看java.nio/BufferPool/direct 进程内使用代码获取MBeanServer mbs ManagementFactory. getPlatformMBeanServer() ; ObjectName objectName new ObjectName("j…...
陕西网站开发公司/广州网络营销运营
edit类型的子窗口 ES_MULTILINE:多行输入文本框 窗口的消息: WL_COMMAND: EN_CHANGE:当edit窗口内的文本内容改变的时候,edit子窗口给父窗口发送一个WL_COMMAND消息,其通知码是EN_CHANGE。 WM_GETTEXT&…...