[Python]編寫和發(fā)布一個Python CLI工具

原文地址:https://www.stephenw.cc/post/SpPIvHpHl6
難度:??
需求背景:在日常移動端的開發(fā)過程中,CI是很重要的東西,尤其當模塊化完成后雾袱,所有模塊都需要從CI發(fā)布集成七婴,不停地打開網(wǎng)頁是一件很低效的事情,所以用命令行工具的想法應運而生彩郊。
準備工作:python 2.7.x前弯, virtualenv

首先建立項目目錄結構,項目起名叫swagdog

├── README.md  
├── swagdogsrc
│   ├── __init__.py  
│   └── swagdog.py
├── setup.cfg
├── setup.py
└── venv

其中主要代碼將寫在 swagdogsrc/swagdog.py

解析命令行參數(shù)

python 2.7 以上提供了 argparse
包用于解析參數(shù)和提供命令選項焦辅,具體使用如下:

parser = argparse.ArgumentParser()
parser.add_argument('-i', '--init', help="初始化命令行工具", action="store_true")
parser.add_argument('-a', '--add', help="添加新的 task", action="store_true")
parser.add_argument('-d', '--delete', help="刪除指定名稱的 task")
args = parser.parse_args()

add_argument函數(shù)中博杖,第一個參數(shù)的意思是指令的alias,第二個是指全名筷登,同時也是解析后args參數(shù)字典中的 key剃根。help字段不多做解釋了,最后一個 action參數(shù)是可選的前方,使用 action表示使用這個指令時可以不添加參數(shù)狈醉。假如 action參數(shù)沒有定義,那么解析出來的 args字典中對應的字段就是 None惠险。

在拿到對應的參數(shù)后我們便可以執(zhí)行指定的工作了

數(shù)據(jù)存儲

有時我們需要命令行工具存取一些簡單的用戶信息苗傅,方便以后快速操作。在現(xiàn)有的讀寫權限下班巩,我們可以選取用戶目錄~作為數(shù)據(jù)存儲的目錄渣慕。

config_dir = os.path.expanduser('~') + '/.swagdog/'
config_file = config_dir + 'swagdog.yaml'

這里我沒有用 SQLite等存取方式,使用了 yaml文件抱慌,易于從字典數(shù)組等數(shù)據(jù)類型相互轉(zhuǎn)化逊桦。python中也有非常好用的解析 yaml文件的包 pyyaml.

本地安裝測試

在開發(fā)過程中我們可以直接 python swagdogsrc/swagdog.py來調(diào)試,但需要發(fā)布的時候抑进,建議先本地安裝一次試試看强经,我們需要編寫 setup.cfgsetup.py來配置。
setup.cfg比較簡單

[metadata]
description-file = README.md

setup.py相對復雜一點:

from setuptools import setup, find_packages

VERSION = '0.1'

setup(name='swagdog',
      version=VERSION,
      description='swagdog cli tool',
      long_description='swagdog cli tool',
      classifiers=[],
      keywords='swagdog',
      author='stephenw',
      author_email='admin@stephenw.cc',
      url='https://github.com/xxx',
      license='MIT',
      packages=find_packages(),
      include_package_data=True,
      zip_safe=True,
      install_requires=[
          'PyYAML'
      ],
      entry_points={
          'console_scripts': [
              'swagdog = swagdogsrc.swagdog:entry'
          ]
      })

補充一下:'swagdog = swagdogsrc.swagdog:entry'這一行在指定命令行的命令名稱調(diào)用的具體函數(shù)寺渗,我定義為源代碼中的 entry函數(shù)匿情,所以源代碼需要一層函數(shù)封裝。
然后信殊,直接執(zhí)行 python setup.py即可本地安裝測試

發(fā)布到pypi

為了讓別人也能用炬称,需要發(fā)布到 pypi上去。首先需要到 https://pypi.python.org/注冊一個賬戶涡拘,然后執(zhí)行:

python setup.py register  

輸入你注冊的賬戶和密碼转砖,你就會擁有存儲這個工具的空間了,然后把工具上傳上去:

  pip install twine  
  python setup.py sdist bdist_wheel  
  twine upload dist/swagdog-0.1*  

上傳完成后就可以使用 pip install swagdog來安裝了。

完善

  • 你可能需要測試更多版本的 python支持
  • 注意最python版本的限制府蔗,不同環(huán)境的安裝引導
  • macOS 原生的python不支持眾多特性晋控,建議 brew install python 替換

- EOF -

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市姓赤,隨后出現(xiàn)的幾起案子赡译,更是在濱河造成了極大的恐慌,老刑警劉巖不铆,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝌焚,死亡現(xiàn)場離奇詭異,居然都是意外死亡誓斥,警方通過查閱死者的電腦和手機只洒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來劳坑,“玉大人毕谴,你說我怎么就攤上這事【喾遥” “怎么了涝开?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長框仔。 經(jīng)常有香客問我舀武,道長,這世上最難降的妖魔是什么离斩? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任银舱,我火速辦了婚禮,結果婚禮上跛梗,老公的妹妹穿的比我還像新娘纵朋。我一直安慰自己,他們只是感情好茄袖,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嘁锯,像睡著了一般宪祥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上家乘,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天蝗羊,我揣著相機與錄音,去河邊找鬼仁锯。 笑死耀找,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播野芒,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼蓄愁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了狞悲?” 一聲冷哼從身側(cè)響起撮抓,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎摇锋,沒想到半個月后丹拯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡荸恕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年乖酬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片融求。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡咬像,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出双肤,到底是詐尸還是另有隱情施掏,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布茅糜,位于F島的核電站七芭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蔑赘。R本人自食惡果不足惜狸驳,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缩赛。 院中可真熱鬧耙箍,春花似錦、人聲如沸酥馍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旨袒。三九已至汁针,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間砚尽,已是汗流浹背施无。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留必孤,地道東北人猾骡。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親兴想。 傳聞我的和親對象是個殘疾皇子幢哨,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容

  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,478評論 6 427
  • GitHub 上有一個 Awesome - XXX 系列的資源整理,資源非常豐富,涉及面非常廣襟企。awesome-p...
    若與閱讀 18,643評論 4 418
  • 環(huán)境管理管理Python版本和環(huán)境的工具嘱么。p–非常簡單的交互式python版本管理工具。pyenv–簡單的Pyth...
    MrHamster閱讀 3,792評論 1 61
  • 譯者按:原文寫于2011年末顽悼,雖然文中關于Python 3的一些說法可以說已經(jīng)不成立了曼振,但是作為一篇面向從其他語言...
    EarlGrey閱讀 69,659評論 7 124
  • 今天是開課的第一天,心情有點激動蔚龙,其實壓力也是蠻大的冰评。老師給我們講的第一節(jié)課叫做利他。第一講心態(tài)木羹,心態(tài)分為以下五點...
    cf89閱讀 240評論 0 0