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

96
蝴蝶兰玫瑰
2017.04.01 15:56* 字数 1363

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

如何分解这个发布任务?

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

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

2.发布它.

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

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

1.1.命令行的特点,以及Python的如何编写命令行

1.2.如何组织代码结构

.

2.发布

2.1.注册pypi账户

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

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

3.完善代码

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

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

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

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

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

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

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

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

sys.argv就是这样的嘛!

我们很容易这样写代码.

python testargv.py thisisaargv1

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

python testargv.py thisisaargv1 -d -f 0

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

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

# 用户可能这样输入

danmu.fmhttp://www.douyutv.com/xiaocang -q 1 -v 2

danmu.fm-q1-v2http://www.douyutv.com/xiaocang

# 当然,肯定还有漏写啦,等等,你得需要转类型,增加各种blablabla的描述吧,添加默认的参数值吧.

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

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

importargparse

APP_DESC="""

这就是描述

"""

print(APP_DESC)

iflen(sys.argv)==1:

sys.argv.append('--help')

parser=argparse.ArgumentParser()

parser.add_argument('-q','--quality',type=int,default=0,help="download video quality : 1 for the standard-definition; 3 for the super-definition")

parser.add_argument('-v','--verbose',default=0,help="print more debuging information")

parser.add_argument('-s','--store',help="保存流媒体文件到指定位置")

parser.add_argument('-c','--config',default=0,help="读取~/.danmu.fm配置,请~/.danmu.fm指定数据库")


# 获取对应参数只需要args.quality,args.url之类.

url=(args.url)[0]

print(url)

#其他执行逻辑

保存为danmu.py

这样就可以执行命令

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

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

1.2.如何组织代码结构.

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

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

danmu.fm

├──README.md

├──danmufm

│├──__init__.py

│├──client

││├──__init__.py

││├──__init__.pyc

││├──douyu_client.py

││└──douyu_danmu_client.py

│├──danmu.py

│├──misc

││├──__init__.py

││├──color_printer.py

││├──downloaders.py

││└──player.py

│└──model

│├──__init__.py

│└──douyu_msg.py

├──docs

├──setup.cfg

├──setup.py

├──sh.py

└──tests

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

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

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

setup.cfg 是什么鬼东西

setup.py 是什么鬼东西

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

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

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

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

相对路径导入的的时候需要注意运行的时候使用如下命令学好python学好python你需要一个良好的环境,一个优质的开发交流群,群里都是那种相互帮助的人才是可以的,我有建立一个python学习交流群,在群里我们相互帮助,相互关心,相互分享内容,这样出问题帮助你的人就比较多,群号是301,还有056,最后是051,这样就可以找到大神聚合的群,如果你只愿意别人帮助你,不愿意分享或者帮助别人,那就请不要加了,你把你会的告诉别人这是一种分享。如果你看了觉得还可以的麻烦给我点个赞谢谢

日记本
Web note ad 1