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

1. PyPi的用途

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

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

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并输入许可证文本。

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/register/注册账号,如果有账号的请忽略,记住你的账号和密码,后面上传包会使用。

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

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

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

3.验证发布PYPI成功

上传完成了会显示success,我们直接可以在PyPI上查看,如下:


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

如下图所示:

进入Python Shell验证结果如下:

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

Python学习交流群,欢迎各位小伙伴来交流学习。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容