Python实战教程:教你如何将自己的python包发布到PyPI上,分享自己的python包

唐咨
• 阅读 242

Python实战教程:教你如何将自己的python包发布到PyPI上,分享自己的python包

1. PyPi的用途

Python中我们常常会用到第三方的包,在默认情况下,用到的第三方工具包基本都是在Pypi.org里面下载。
我们举个栗子:如果你希望用Python来实现一个金融量化分析工具,目前从Yahoo 和 Google的出来的金融数据是比较好用的。你可能需要对这 2 个平台的 API进行读取,然后再依次完成下载、分析数据的代码。好麻烦是不是,这样你可以到 PyPi 到上面去找找有没有已经写过这个内容,幸运的是,你真找到了,你找到了一个 package 叫做 yfinance。

这个时候你只需要一个命令,免除了我们从头实现的麻烦就可以了,是不是非常方便。

Python实战教程:教你如何将自己的python包发布到PyPI上,分享自己的python包

PyPI 是 Python Package Index 的首字母简写,其实表示的是 Python 的 Packag 索引,这个也是 Python 的官方索引。

需要先在本地环境安装pip,然后如果需要安装其他工具包的话就要使用指令

一句话解释: 如果你使用的是 Java 项目的话,你就将 PyPi 理解成 Maven 就行了。

那要如何将我们自己开发的一个包上传到PyPI,供给他人使用呢?

2.Python包发布步骤

下面就开始介绍怎样将自己的Python项目发布到PyPI

2.1 创建目录结构

创建一个测试项目,例如project_demo,在该项目下,创建一个待发布的包目录,例如:package_mikezhou_talk,并在该project_demo目录下,依次创建:setup.py、LICENSE、README.rst几项文件。

2.2 准备文件

接下来我们来逐一编写除了代码以外的文件。

1、README.rst是关于项目的描述文件,一般包含怎样安装项目,怎样使用项目等。打开README.rst并输入以下内容。可以自定义此项,放入一些对项目的介绍。

2、LICENSE.txt,创建许可证

上传到Python Package Index的每个包都包含许可证,这一点非常重要。这告诉用户安装你的软件包可以使用您的软件包的条款。开源License,有如MIT,Apache license 2.0等。选择许可证后,打开 LICENSE并输入许可证文本。

Python实战教程:教你如何将自己的python包发布到PyPI上,分享自己的python包

3、setup.py文件

setup.py是setuptools的构建脚本,用来描述项目,打包的时候会用到这个文件。它把我们项目的名字告诉PyPI,是什么版本,依赖哪些库,支持哪些操作系统,可以在哪些版本的Python上运行,等等。

重要参数说明:

· name:项目的名称,name是包的分发名称。

· version:项目的版本。需要注意的是,PyPI上只允许一个版本存在,如果后续有了任何代码上的更改,再次上传需要增加版本号

· author和author_email:项目作者的名字和邮件, 用来识别包的作者。

· description:项目的简短描述

· long_description:项目的详细描述,会显示在PyPI的项目描述页面。必须是rst(reStructuredText) 格式的

· packages:指定最终发布的包中要包含的packages。

· install_requires:项目依赖哪些库,这些库会在pip install的时候自动安装

· classifiers:其他信息,一般包括项目支持的Python版本,License,支持的操作系统。

克隆setup.py仓库(推荐)

如果手写setup.py脚本文件你觉得难度大太,给你推荐另外一个简易方法。

大名鼎鼎的requests库的作者大神kennethreitz为大家提供了一个仓库准备了一个很好的setup.py的模板,当然你也可以自己去手写setup.py。

建议大家直接编辑之前的仓库里的setup.py, 只需要修改一些必要的配置就行了。

2.3 编写核心代码

接下来我们就可以来编写自己的代码了,要注意源代码文件夹(仓库里的package_mikezhou_talk包目录)的名字与setup.py里配置的包名(Name)要一致。

这一部内容,就需根据各自的需求,自行实现即可。

2.4 生成分发档案

下一步是为包生成分发包。这些是上传到包索引的档案,可以通过pip安装。

确保您拥有setuptools并安装了最新版本。

生成这前,可以先运行python setup.py check检查setup.py是否有错误,如果没有报错误,则进行下一步输出一般是running check。

1、准备好上面的步骤, 一个包就基本完整了, 剩下的就是打包了,可以使用下面命令打包一个源代码的包:

这样在当前目录的dist文件夹下, 就会多出一个tar.gz结尾的包了:

2、也可以打包一个wheels格式的包,这样会在dist文件夹下面生成一个whl文件.

3、或者从setup.py位于的同一目录运行此命令,上面的命令会在dist目录下生成一个tar.gz的源码包和一个.whl的Wheel包。

2.5 发布包到PyPi

1、接下来就是去https://pypi.org/account/regi...,如果有账号的请忽略,记住你的账号和密码,后面上传包会使用。

2、接下来就是上传你的包了,这里使用twine上传。需要先安装twine(用 twine上传分发包,并且只有 twine> = 1.11.0 才能将元数据正确发送到 Pypi上)

3、安装完之后,运行下面的命令将库上传,上传包,期间会让你输入注册的用户名和密码

输入 PyPI注册的用户名和密码。上传完成后,我们的项目就成功地发布到PyPI了。

3.验证发布PYPI成功

上传完成了会显示success,我们直接可以在PyPI上查看,如下:
Python实战教程:教你如何将自己的python包发布到PyPI上,分享自己的python包

您可以使用pip来安装包并验证它是否有效。创建一个新的virtualenv (请参阅安装包以获取详细说明)并从TestPyPI安装包:

如下图所示:

Python实战教程:教你如何将自己的python包发布到PyPI上,分享自己的python包

进入Python Shell验证结果如下:

Python实战教程:教你如何将自己的python包发布到PyPI上,分享自己的python包

至此,我们已经成功地将自己开发的Python程序发布到了PyPI,此时你,可以直接在你本地的环境通过pip命令安装示例中的package-mikezhou-talk这个包了。

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Karen110 Karen110
4年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
Scapy 从入门到放弃
0x00前言最近闲的没事,抽空了解下地表最强的嗅探和收发包的工具:scapy。scapy是一个python模块,使用简单,并且能灵活地构造各种数据包,是进行网络安全审计的好帮手。0x01安装因为2020年python官方便不再支持python2,所以使用python3安装。!(https://oscimg.oschina.net/os
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable