打包你的腳本闭树,做成個(gè)有圖形界面的程序吧!

最近想把一個(gè)寫的幾百行的腳本封裝成一個(gè)App荒澡,方便使用报辱,于是進(jìn)行了一番探索,在這里記錄一下单山!

方案選擇

首先是搜索有哪幾種解決方案碍现,哪個(gè)是最好的呢。搜索下來(lái)發(fā)現(xiàn)饥侵,有這么幾種:

將Shiny APP搭建為獨(dú)立的桌面可執(zhí)行程序

我覺(jué)得Shiny更適合網(wǎng)站布署呢鸵赫,另外就是需要改寫的內(nèi)容太多,因?yàn)殚_(kāi)始是R腳本躏升,需要重新改寫成Shiny App的代碼辩棒。用的是R-Protable,然后還需要node.js封裝,又是一個(gè)勸退的坑呢一睁,這個(gè)不是太熟悉钻弄,還要配置環(huán)境變量,好像便攜性就大打折扣了呢者吁。

python實(shí)現(xiàn)帶GUI界面的文件處理器原來(lái)這么簡(jiǎn)單窘俺,看完你也可以

另外發(fā)現(xiàn)的一個(gè)寶藏python模塊,最早知道這個(gè)是生信菜鳥(niǎo)團(tuán)的分享复凳,Gooey瘤泪,雖然知道python打包一個(gè)App體積是臃腫到無(wú)敵的,但是簡(jiǎn)單和文件體積大點(diǎn)來(lái)說(shuō)育八, 簡(jiǎn)單最重要了吧对途,幾百M(fèi)的空間大家不會(huì)太在乎吧,特別是現(xiàn)在手機(jī)App都這個(gè)體積的時(shí)代髓棋,于是選個(gè)了实檀。依然使用R-Protable,用R語(yǔ)言這是不可少的按声,不過(guò)如果腳本改寫成Python的膳犹,它應(yīng)該就可以省略了,這部分空間應(yīng)該也就能省下签则。
實(shí)現(xiàn)思路就是超級(jí)簡(jiǎn)單的os.system(cmd) 執(zhí)行我們的腳本了须床,以下是基本的實(shí)現(xiàn)過(guò)程:

GUI的實(shí)現(xiàn)

https://segmentfault.com/a/1190000040111317
這里的代碼和圖片部分來(lái)自上面的[參考博客](python-Gooey速成GUI程序 - SegmentFault 思否
)。
模塊安裝
pip install Gooey
GUI主程序

# -*- coding: utf-8 -*-
import os

from gooey import Gooey, GooeyParser    
@Gooey(
    richtext_controls=True,
    language='chinese',
    header_show_title=False,
    program_name="處理工具v1.0",
    encoding="utf-8", 
    default_size=(650, 555),
    progress_expr="current / total * 100",
    
    # 再次執(zhí)行怀愧,清除之前執(zhí)行的日志
    clear_before_run = True,
    timing_options = {'show_time_remaining':True,'hide_time_remaining_on_complete':False}  
)

def main():
    desc = "工具說(shuō)明:"+"\n"+"   "+"1.本工具僅作為xxx使用"
    file_help_msg = "help...info"
    
    my_cool_parser = GooeyParser(description=desc)  
    
    my_cool_parser.add_argument(option_strings=['-u', '--username'],dest='賬號(hào)', widget="TextField")
    my_cool_parser.add_argument(option_strings=['-p', '--password'],dest='密碼', widget="TextField")
    my_cool_parser.add_argument(option_strings=['-v', '--verify_number'],dest='驗(yàn)證碼', widget="TextField")
    my_cool_parser.add_argument(option_strings=['-f', '--file_path'], dest="待匹配文件路徑", widget="FileChooser")
    
    # 獲取參數(shù)
    args = my_cool_parser.parse_args() 
    print(args)
    # 第一次用format的方法
    cmd = '.\\App\\R-Portable\\bin\\Rscript.exe --no-save App_test.R {0} '.format(args)
    print(cmd)
    os.system(cmd)  
# 原博客少了個(gè)主函數(shù)的調(diào)用侨颈,我加上了余赢,不過(guò)這個(gè)不夠標(biāo)準(zhǔn)芯义,標(biāo)準(zhǔn)應(yīng)該是__main__這樣的
main() 


腳本的內(nèi)容以及運(yùn)行依賴

args<-commandArgs(T)
print(args)

報(bào)錯(cuò)的解決
運(yùn)行中出現(xiàn)了如下的錯(cuò)誤,最終解決方案是把這個(gè):
'utf-8' codec can't decode byte 0xb2 in position 13: invalid start byte
我的解決方案是上這個(gè)編碼方案是把有.decode(的替換成.decode('ISO-8859-1')妻柒,替換了兩處扛拨,就正常運(yùn)行啦!

打包成exe

# 首先安裝這個(gè)模塊
pip install pyinstaller
# 然后就可以愉快地打包exe了
pyinstaller.exe  .\gui.py -i C:\Users\00\miniconda3\Lib\site-packages\gooey\images\icon.ico

收工举塔,可以交付啦绑警!

對(duì)啦,還有R-portable

R Portable download | SourceForge.net
下載安裝就可以啦央渣,不過(guò)好處是安不裝一次计盒,其余的可以復(fù)制分享就行啦,好奇作者為啥不直接提供zip呢芽丹!
https://sourceforge.net/projects/rportable/files/R-Portable/4.1.2/R-Portable_4.1.2.paf.exe/download

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末北启,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌咕村,老刑警劉巖场钉,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異懈涛,居然都是意外死亡逛万,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門批钠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宇植,“玉大人,你說(shuō)我怎么就攤上這事埋心〉鄙矗” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵踩窖,是天一觀的道長(zhǎng)坡氯。 經(jīng)常有香客問(wèn)我,道長(zhǎng)洋腮,這世上最難降的妖魔是什么箫柳? 我笑而不...
    開(kāi)封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮啥供,結(jié)果婚禮上悯恍,老公的妹妹穿的比我還像新娘。我一直安慰自己伙狐,他們只是感情好涮毫,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著贷屎,像睡著了一般罢防。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唉侄,一...
    開(kāi)封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天咒吐,我揣著相機(jī)與錄音,去河邊找鬼属划。 笑死恬叹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的同眯。 我是一名探鬼主播绽昼,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼须蜗!你這毒婦竟也來(lái)了硅确?” 一聲冷哼從身側(cè)響起肿孵,我...
    開(kāi)封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎疏魏,沒(méi)想到半個(gè)月后停做,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡大莫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年蛉腌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片只厘。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡烙丛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出羔味,到底是詐尸還是另有隱情河咽,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布赋元,位于F島的核電站忘蟹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏搁凸。R本人自食惡果不足惜媚值,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望护糖。 院中可真熱鬧褥芒,春花似錦、人聲如沸嫡良。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)寝受。三九已至坷牛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間羡蛾,已是汗流浹背漓帅。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工锨亏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痴怨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓器予,卻偏偏與公主長(zhǎng)得像浪藻,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乾翔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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