利用PyInstaller打包exe文件

前言

平常我們通過Python寫完一些小腳本之后态蒂,如果使用不頻繁的話,一般會選擇在DOS界面直接跑腳本费什,或者在IDE中運(yùn)行钾恢。但當(dāng)我們需要頻繁使用某些腳本,或者在沒有Python環(huán)境的機(jī)器上也能順利運(yùn)行時鸳址,我們需要怎么做呢瘩蚪?

一個好的辦法,就是將腳本打包成exe可執(zhí)行文件氯质,打包成exe有以下好處:
1募舟,可以方便他人使用自己的腳本或工具
2,方便自己闻察,使用時直接點擊執(zhí)行exe文件即可

PyInstaller的安裝

在這里拱礁,主要和大家介紹一下Python通過PyInstaller打包exe的方法琢锋。

本人的環(huán)境:Python3.7.0、PyInstaller3.5

首先呢灶,對于PyInstaller的安裝吴超,我們直接通過 pip 命令進(jìn)行安裝即可,命令如下:

pip3 install PyInstaller==3.5

因為我電腦上裝了多個python版本鸯乃,為了區(qū)分鲸阻,所以使用的是 pip3 來安裝,大家按自己實際情況操作缨睡。

PyInstaller打包

安裝完成之后鸟悴,進(jìn)入待打包腳本(假設(shè)是TEST.py)的目錄下,執(zhí)行打包命令即可奖年。

pyinstaller -F TEST.py
PyInstaller打包

如上细诸,打包成功后進(jìn)入腳本目錄下,發(fā)現(xiàn)生成了exe文件和一些中間文件陋守,我們所需要的exe文件在dist目錄下震贵,其余的中間文件,可以刪掉水评。

打包生成的文件

生成自定義圖標(biāo)的exe文件

如果在打包過程需要自定義exe文件的圖標(biāo)猩系,我們需要準(zhǔn)備一個正常的后綴為 .ico 的圖標(biāo),不要直接去改后綴中燥,可參考以下方法得到ico圖標(biāo)寇甸。

下載圖片:https://www.iconfont.cn/ (阿里巴巴矢量圖標(biāo)庫)、https://www.easyicon.net/
制作ico圖標(biāo):http://www.bitbug.net/ 褪那、http://www.faviconico.org/

準(zhǔn)備好ico圖標(biāo)后幽纷,執(zhí)行命令:pyinstaller -F -i ico圖標(biāo)路徑 py腳本路徑,如下供參考:

pyinstaller -F -i=D:\pycharm\test\favicon-201907310118208.ico D:\pycharm\test\TEST.py
打包結(jié)果

顯示打包成功之后博敬,從輸出的信息中看到友浸,的確對ico圖標(biāo)進(jìn)行了處理,為了進(jìn)一步驗證偏窝,繼續(xù)到exe文件路徑下查看收恢,發(fā)現(xiàn)好像不對呀,怎么還是顯示打包默認(rèn)圖標(biāo)呢祭往?

查看圖標(biāo)

出現(xiàn)以上顯示伦意,可能是因為我們查看方式不對,當(dāng)我們右鍵查看屬性便能看到自定義圖標(biāo)成功了硼补。

自定義圖標(biāo)

可能遇到的問題

在安裝完P(guān)yInstaller驮肉,執(zhí)行打包命令時,可能會遇到如下報錯:

D:\pycharm\test>pyinstaller -F TEST.py
418 INFO: PyInstaller: 3.5
419 INFO: Python: 3.7.0
419 INFO: Platform: Windows-10-10.0.17134-SP0
420 INFO: wrote D:\pycharm\test\TEST.spec
428 INFO: UPX is not available.
454 INFO: Extending PYTHONPATH with paths
['D:\\pycharm\\test', 'D:\\pycharm\\test']
454 INFO: checking Analysis
455 INFO: Building Analysis because Analysis-00.toc is non existent
458 INFO: Initializing module dependency graph...
460 INFO: Initializing module graph hooks...
462 INFO: Analyzing base_library.zip ...
Traceback (most recent call last):
  File "<string>", line 41, in <module>
  File "<string>", line 13, in walk_packages
  File "d:\python\installation\lib\pkgutil.py", line 130, in iter_modules
    for name, ispkg in iter_importer_modules(i, prefix):
  File "d:\python\installation\lib\pkgutil.py", line 149, in _iter_file_finder_modules
    import inspect
  File "d:\python\installation\lib\inspect.py", line 40, in <module>
    import linecache
  File "d:\python\installation\lib\linecache.py", line 11, in <module>
    import tokenize
  File "d:\python\installation\lib\tokenize.py", line 33, in <module>
    import re
  File "d:\python\installation\lib\re.py", line 143, in <module>
    class RegexFlag(enum.IntFlag):
AttributeError: module 'enum' has no attribute 'IntFlag'
Traceback (most recent call last):
  File "<string>", line 41, in <module>
  File "<string>", line 13, in walk_packages
  File "d:\python\installation\lib\pkgutil.py", line 130, in iter_modules
    for name, ispkg in iter_importer_modules(i, prefix):
  File "d:\python\installation\lib\pkgutil.py", line 149, in _iter_file_finder_modules
    import inspect
  File "d:\python\installation\lib\inspect.py", line 40, in <module>
    import linecache
  File "d:\python\installation\lib\linecache.py", line 11, in <module>
    import tokenize
  File "d:\python\installation\lib\tokenize.py", line 33, in <module>
    import re
  File "d:\python\installation\lib\re.py", line 143, in <module>
    class RegexFlag(enum.IntFlag):
AttributeError: module 'enum' has no attribute 'IntFlag'
3791 INFO: running Analysis Analysis-00.toc
3845 INFO: Adding Microsoft.Windows.Common-Controls to dependent assemblies of final executable
  required by d:\python\installation\python3.exe
4519 INFO: Caching module hooks...
4523 INFO: Analyzing D:\pycharm\test\TEST.py
5098 INFO: Processing pre-find module path hook   distutils
6265 INFO: Processing pre-find module path hook   site
6266 INFO: site: retargeting to fake-dir 'd:\\python\\installation\\lib\\site-packages\\PyInstaller\\fake-modules'
6402 INFO: Processing pre-safe import module hook   setuptools.extern.six.moves
Traceback (most recent call last):
  File "<string>", line 3, in <module>
  File "d:\python\installation\lib\site-packages\setuptools\__init__.py", line 5, in <module>
    import distutils.core
  File "d:\python\installation\lib\distutils\core.py", line 16, in <module>
    from distutils.dist import Distribution
  File "d:\python\installation\lib\distutils\dist.py", line 9, in <module>
    import re
  File "d:\python\installation\lib\re.py", line 143, in <module>
    class RegexFlag(enum.IntFlag):
AttributeError: module 'enum' has no attribute 'IntFlag'
pre-safe-import-module hook failed, needs fixing.

在網(wǎng)上查找解決方案已骇,發(fā)現(xiàn)是因為環(huán)境下 enum34庫與Python3.7不兼容導(dǎo)致的報錯离钝,另外該庫在Python3.7也不是必要的票编,因此我直接將其卸載,命令如下:

查看是否有enum34庫:pip3 show enum34
pip卸載enum34庫:pip3 uninstall enum34

卸載成功之后卵渴,再次執(zhí)行打包命令慧域,發(fā)現(xiàn)問題已解決,不會報錯了浪读。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末昔榴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子碘橘,更是在濱河造成了極大的恐慌互订,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛹屿,死亡現(xiàn)場離奇詭異屁奏,居然都是意外死亡岩榆,警方通過查閱死者的電腦和手機(jī)错负,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勇边,“玉大人犹撒,你說我怎么就攤上這事×0” “怎么了识颊?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長奕坟。 經(jīng)常有香客問我祥款,道長,這世上最難降的妖魔是什么月杉? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任刃跛,我火速辦了婚禮,結(jié)果婚禮上苛萎,老公的妹妹穿的比我還像新娘桨昙。我一直安慰自己,他們只是感情好腌歉,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布蛙酪。 她就那樣靜靜地躺著,像睡著了一般翘盖。 火紅的嫁衣襯著肌膚如雪桂塞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天馍驯,我揣著相機(jī)與錄音阁危,去河邊找鬼炊甲。 笑死,一個胖子當(dāng)著我的面吹牛欲芹,可吹牛的內(nèi)容都是我干的卿啡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼菱父,長吁一口氣:“原來是場噩夢啊……” “哼颈娜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起浙宜,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤官辽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后粟瞬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體同仆,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年裙品,在試婚紗的時候發(fā)現(xiàn)自己被綠了俗批。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡市怎,死狀恐怖岁忘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情区匠,我是刑警寧澤干像,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站驰弄,受9級特大地震影響麻汰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜戚篙,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一五鲫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧已球,春花似錦臣镣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至阔蛉,卻和暖如春弃舒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工聋呢, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留苗踪,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓削锰,卻偏偏與公主長得像通铲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子器贩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

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