寫一個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,這樣就可以找到大神聚合的群,如果你只愿意別人幫助你,不愿意分享或者幫助別人,那就請不要加了,你把你會的告訴別人這是一種分享。如果你看了覺得還可以的麻煩給我點個贊謝謝