Python 升級之路( Lv27 ) 打包工具 pyinstaller
今天我們將學習pyinstaller, 利用其將Python 程序打包成Windows可執行的exe程序。
今日冒險片段上:
在結束淺析之地的冒險之后, 他們繼續走, 便走到一片巨大山脈. 而出口只有眼前的這個洞穴. 而據米斯特對這個地方的了解, 這個區域叫蜘蛛洞穴. 是通往首都的畢竟之地. 但是在這個洞穴里面棲息這很多蜘蛛, 有些甚至攜帶劇毒. 聽人勸, 吃飽飯. 因此了不起非常小心, 開始小心翼翼的通過洞穴.
什么是 pyinstaller
pyinstaller 是Python 提供的一個第三方拓展庫模塊. 它的功能是將我們的 Python 程序打包成可執行的 .exe 程序。
安裝
方式一:pycharm安裝
- 安裝 pyinstaller 模塊 在 pycharm 中操作:file-->setting-->Project:xxx -->Project interpretor,再點擊(加號)
- 在新彈窗中輸入要下載的第三方模塊, 然后點擊該模塊, 最后點擊左下角安裝即可
方式二:命令行安裝
命令行安裝: 在命令行輸入一下命令進行安裝
pip install pyinstaller
使用
最基本的使用方式:
pyinstaller xxx.py
注意: 后面可以跟多個python文件, 但注意用空格隔開。
參數介紹
pyinstall 打包時, 可以跟各種參數, 這些參數用來拓展打包時需要的定制需求。
常用參數如下表所示:
參數名 | 作用 |
-F / --onefile | 打包一個成單個文件, 多個.py文件或者需要打包其他資源(圖片,音頻) 不要使用 |
-D / --onedir | 打包多個文件,在dist中生成很多依賴文件,適合以框架形式編寫工具代碼 |
-w / –windowed/–noconsole | 程序啟動的時候不會打開命令行 (只對Windows有效, 編寫GUI程序時使用此參數有用) |
-i /–icon | 指定打包之后的.exe文件的圖標 |
-n / –name=NAME | 指定打包之后的.exe 文件的名稱 |
-v FILE /–version=FILE | 指定打包之后的.exe 文件的版本信息. FILE: 版本信息描述文件編寫請點擊查看 |
-a/--ascii | 不包含 Unicode 字符集支持 |
-d/--debug | 產生 debug 版本的可執行文件 |
-c /--console/ --nowindowed | 使用命令行執行(此參數默認開啟) |
-v / --version | 查看當前pyinstaller版本 |
--add-data <源目錄;目標目錄or源目錄:目標目錄> | 將源目錄文件額外打包到.exe程序所在目標目錄. ; Windows下使用, :Linux下使用 |
-h/--help | 查看該命令幫助信息 |
利用自帶幫助文檔進行學習
下載pyinstaller 之后, 可以輸入pyinstaller -h 或者 pyinstaller --help , 來查看其自帶的幫助文檔。
打包
(1) 方式一:利用命令行打包
利用上面所學到的參數,對文件進行打包。
- 將文件打包成 xxx.exe
pyinstaller -F xxx.py
- 將文件打包成 xxx.exe, 并且運行時不打開命令行(tkinter程序打包時使用)
pyinstaller -F -w xxx.py
- 打包上一章坦克大戰源碼 將源碼打包成 坦克大戰v1.0.1.exe 并且運行時不打開命令行, 將.\img\p1tankU.gif設置為程序圖標, 并將當前.\img\目錄下文件打包到 .exe程序運行所在目錄, 且命名為.\img\
pyinstaller -w -D -i .\img\p1tankU.gif -n "坦克大戰v1.0.1" tank26.py --add-data ".\img\;.\img\"
(2) 方式二:利用圖形界面打包
auto-py-to-exe 用于將Python程序打包成可執行文件的圖形化工具 該工具的作用是將我們的在圖形化界面點擊的選項轉換成方式一中的命令。
- 安裝方式 :pip install auto-py-to-exe
- 啟動方式: 命令行輸入 auto-py-to-exe
- 啟動后, 我們只需要根據情況去選擇, 然后點擊底部藍色按鈕即可
今日冒險片段下:
洞穴里面的冒險可謂是百密一疏, 就在即將通過時. 由于了不起的放松導致一塊巖石掉落到地上, 發出了刺耳的聲音. 頓時各種蜘蛛蜂擁而來, 好在利用蜘蛛懼火的特性, 二人將其驅散. 但是隨著而來的巨大虛影卻讓他們緊繃的精神中多了一絲凝重. 來著正式此地領主, 一只名為艾克洛索的巨大蜘蛛. 雖然它的身軀要比普通的蜘蛛打上幾十倍, 但是敏捷倒是絲毫不比他們差. 在較為狹小的空間內四處跳動, 借以尋找到冒險家的破綻進而攻擊. 了不起對這個仿佛擁有智慧的怪物不敢大意. 佯裝要逃跑, 吸引其主動攻擊, 然后米斯特借機偷襲. 縱然其能吐出強力蛛絲, 但在二人的合力圍攻下, 艾克洛索逐漸敗下陣來. 最終被二人擊敗, 與此同時一道金光閃過, 了不起成功晉升到lv28.