专栏首页CDA数据分析师如何发布一个Python命令行工具

如何发布一个Python命令行工具

上次写的一个终端里面斗鱼TV弹幕Python版本和Ruby版本,并且发布到PIP和RubyGems上面.在发布PIP包的时候,居然Google不到一篇可以非常好的讲解这个流程的文章.于是整理这篇文章,并且方便后来自己检索,并且方便他人找资料.

自推荐下依照本文定制的命令行工具danmu.fm的github地址:

https://github.com/twocucao/danmu.fm

本文的目的也是非常简单:

写一个Python命令行工具,并且发布到PIP上面.并且在这个过程中给出我自己的一些思考.

如何分解这个发布任务?

只需要进行如下的两个步骤便可以:

1.写好一个Python命令行工具.

2.发布它.

当然,这样不够细致.再细分一下.

1.写好一个Python命令行工具

写好一个命令行工具首先要知道命令行工具是什么?

在我看来,命令行工具就是一种完成某种类型的任务的终端程序.

也就是基本上没有什么用户界面的程序.

由于基本上没有什么用户界面,所以导致单个命令行的交互能力及其低下.但这种低下的交互性对于一些固定工作而言,简直就是最灵活的工具.只需要输入一些命令便可以完成某种类型的工作.实在是方便的很.

所以,某种程度上,终端程序低交互的缺点反而成了优点.

1.1.Python的如何编写一个简单的命令行

对于Python和命令行交互,我们很容易想出一个比较方便的方案.

sys.argv就是这样的嘛!

我们很容易这样写代码.

甚至我们也可以这样写命令行,

那么,这样写的后果就是,不方便解析出(不是不能,是不方便) -d -f 0 以及 thisisaargv1.

不信的话,你解析一个下面场景的命令行试试,

于是Python就提供了一个非常好用的模块可以使用.叫做argparse.

上面的描述就变成了这个样子

保存为danmu.py

这样就可以执行命令

python danmu.py http://www.douyutv.com/xiaocang -q 1 -v 2

通过args就可以获取参数,然后进行终端程序的参数初始化.

可是这和我们的要求还是不同嘛,我们不想多写Python XXX,我们想直接XXX.就像这样.

不急,下面就是了.

1.2.如何组织代码结构.

于是,现在就要开始组织代码结构了.

我们在最终的代码目录大概是这样的.

这就是我上次写的danmu.fm的代码目录.

聪明的你这时候你注意到了:

1.主要的程序不是放在根目录下面,而是放在第二目录danmufm下面.

2.setup.cfg 是什么鬼东西

3.setup.py 是什么鬼东西

对于上面几点,我们分别进行解释

1.2.1 为什么主要程序在第二目录下

为了把主要的程序分离出来,放在第二目录下面,这样的待会打包以后多出很多文件夹就不会对源码造成干扰.

当然,由于把程序放在了第二目录下面,所以,脚本里面的from import语句应该使用相对路径导入.

相对路径导入的的时候需要注意运行的时候使用如下命令

1.2.2 setup.cfg

填写如下内容即可.

然后去写Markdown的Readme就好了.

1.2.3 setup.py

这个是重头戏了.

setup这个py文件就是打包配置文件.对这个程序是谁的,有什么依赖,入口是什么,等等等等的配置.

官方有distutils这个包管理器工具,设置也非常的简单,只是,它不支持entry_points属性,由于无法使用entry_point,也就无法通过命令来跳转到指定模块运行程序,这也就意味着,官方工具不方便写成命令行.还是setuptools好.

上面需要注意的就是install_requires可以添加依赖.其他的你猜都可以猜出来是做什么的.自己去看代码,我就不多说了.

2. 发 布

所谓的发布,就是将打包好的程序的某个版本发布到某个仓库中.

2.1.注册pypi账户

到这个上面注册账号:

https://pypi.python.org/pypi

2.2.注册在账户下面注册Python包

进入对应项目根文件,然后执行

这一步程序会让你输入刚刚注册的账号和密码,然后注册该包.注册该包以后,你就有了一个小仓库.可以存放不同版本的danmu.fm.

注册的仓库是可以在这个地址看到的,

https://pypi.python.org/pypi?%3Aaction=pkg_edit&name=danmu.fm

2.3.上传打包好的Python命令行工具.

这里需要借助一个小工具,twine.twine是一个更加安全方便上传打包好的代码的工具.

接着开始打包,打包成两个版本,一个是不需要build的版本,另一个是需要build的版本(顺带吐槽下,这两个诡异的命名).

于是剩下来的就显而易见了,上传build完毕的程序到仓库中.

于是,安装一下,测试是否成功

命令行的工具是这样使用的.

3. 完 善

不断的完善代码,然后打包终端程序发布到仓库给别人用,这就是整个的PIP打包发布流程.

1.这个时候,你可能需要使用版本控制软件.

2.你可能需要增多的代码的测试.

本文分享自微信公众号 - CDA数据分析师(cdacdacda),作者:无与同比

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-03-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 星球大战与 Python 之间不得不说的故事

    摘要: 阔别十年时光,全球瞩目的第七部星球大战电影《原力觉醒》于2016年1月9日在国内上映。它将重新燃起那段神秘的太空岁月与具有原力的宇宙时光。但是,星球大战...

    CDA数据分析师
  • 盘点丨2018 年热门 Python 库丨TOP20

    在解决数据科学任务和挑战方面,Python继续处于领先地位。去年,我对当时热门的Python库进行了总结。今年,我在当中加入新的库,重新对2018年热门Pyth...

    CDA数据分析师
  • 工具 | 学习总结:当我学完Python我学了些什么

    本文是本人学完Python后的一遍回顾,加深理解顺便留作手册以备查阅。 学习Python的这几天来,觉得Python还是比较简单,容易上手的,就基本语法而言,...

    CDA数据分析师
  • 推荐3个微信小工具,99%的人都不知道

    微信这个不多说,现在已经成为了一款超级 APP,几乎是每个人手上都会有的 APP,但是大家都知道它是一款社交工具,支付工具,大多都是用来聊天,刷朋友圈,移动支付...

    六小登登
  • [L4]实战语言模型~softmax与交叉熵

    在介绍完了如何处理数据以及如何构造样本之后,就可以构建我们的神经网络语言模型了,下面是使用LSTM构建的语言模型的大体结构:

    触摸壹缕阳光
  • 有赞白鸦内部培训全公开:企业服务类产品的底层逻辑和有赞产品设计原则

    ?  作者 : 白鸦 ---- 有赞产品设计原则 写在前面 作为一个产品团队,我们最需要的永远都是懂用户懂需求,并保持不断的创新力。有赞希望每个产品人在这里都...

    腾讯SaaS加速器
  • Glide4.0源码全解析(一),GlideAPP和.with()方法背后的故事

    在上一篇文章中我们体验了Glide-4.0的强大,以及更加简便的API,很多童鞋已经开始迁移了,那么接下来我们一起探索一下他的神奇之处:

    先知先觉
  • 如何加强数字版权保护

    随着网络和传媒业的发展,数字版权也成为了人们关注的焦点。以前看电视都要守着电视机,听音乐要买CD。现在随着数字技术的成熟,人们有了更多的选择,有各式各样的视频平...

    墨者安全科技
  • 90后脸萌 CEO 郭列:从学渣到 App Store 排行第一

    7月19日,“腾讯产品家沙龙:90后企业家专场”在北京举行,本文是脸萌CEO郭列的分享内容。

    腾讯大讲堂
  • 从0开始的Python学习005运算符与表达式

    Happy、Liu

扫码关注云+社区

领取腾讯云代金券