pyinstaller的介紹與使用超詳細講解
一、 概述
1、 簡介
pyinstaller是一個第三方庫,它能夠在Windows、Linux、 Mac OS X 等操作系統(tǒng)下將 Python 源文件打包,通過對源文件打包, Python 程序可以在沒有安裝 Python 的環(huán)境中運行,也可以作為一個 獨立文件方便傳遞和管理。
PyInstaller支持Python 2.7和Python 3.3+??梢栽赪indows、Mac OS X和Linux上使用,但是并不是跨平臺的,而是說你要是希望打包成.exe文件,需要在Windows系統(tǒng)上運行PyInstaller進行打包工作;打包成mac app,需要在Mac OS上使用。
2、 安裝與更新
安裝:pip install pyinstaller
更新:pip install --upgrade pyinstaller
注意:
1.PyInstaller 庫會自動將 PyInstaller 命令安裝到 Python 解釋器 目錄中,與 pip 或 pip3 命令路徑相同,因此可以直接使用。
2.Windows上運行PyInstaller還需要PyWin32或者pypiwin32,其中pypiwin32在你安裝PyInstaller的時候會自動安裝。
二、 基本使用
1、 使用示例
語法:pyinstaller 選項 python源文件路徑
不管這個 Python 應用是單文件的應用,還是多文件的應用,只要在使用 pyinstaller 命令時編譯作為程序入口的 Python 程序即可。
PyInstaller工具是跨平臺的,它既可以在 Windows平臺上使用,也可以在 Mac OS X 平臺上運行。在不同的平臺上使用 PyInstaller 工具的方法是一樣的,它們支持的選項也是一樣的。
如,在python源文件的目錄中打開終端,在進行輸入
成功后會出現(xiàn)
2、 常用選項
上表列出的只是 pyinstaller 模塊所支持的常用選項,如果需要了解 Pyinstaller 選項的詳細信息,則可通過 pyinstaller -h 來查看
三、 多文件打包
1、 概念
這里是使用Windows進行打包的,當然其他平臺的打包參數(shù)也是類似,可以去官網(wǎng)學習。
這里,我們需要學習,如何使用pyinstaller將多個py文件打包成一個EXE文件,供我們使用:
首先,我們需要學習,什么是多文件?
多文件就是有一個主文件,主文件依賴其余的py文件才能運行,通過import連接
我們需要使用的是.spec文件
首先,我們創(chuàng)建一個目錄結(jié)構(gòu):
2、 規(guī)范文件
然后,學習一個命令:
pyi-makespec main.py # 運行 pyinstaller ,以main.py為主文件,生成一個spec文件,作為一個標準
此規(guī)范文件也可以自己編寫,同時,生成規(guī)范文件時,直接打包的那些參數(shù)都可以使用
運行后,其在運行目錄下生成一個main.spec文件,其內(nèi)容為:
# -*- mode: python ; coding: utf-8 -*- block_cipher = None #設置 加密,需要安裝tinyaes第三方庫,最多16位字符,此處在使用--key= 會有變化 a = Analysis( ['main.py'], # 運行的所有py文件,包括依賴的py文件 pathex=[], # 搜索導入的路徑列表(此列表為項目絕對路徑),包括選項給出的路徑--paths,項目需要從什么地方導入自定義庫 binaries=[], # 腳本需要的非python模塊,包括--add-binary選項給出的名稱,二進制數(shù)據(jù) datas=[], # 應用程序中包含的非二進制文件,包括--add-data選項給出的名稱,項目需要用到什么數(shù)據(jù),比如圖片,視頻等。里面格式為tuple,第一個參數(shù)是文件路徑,第二個是打包后所在的路徑,其為一個元組:('image/*.png','data/image') hiddenimports=[], # 假如打包后打開exe顯示module not found,就要把該庫添加到hiddenimports里面了 hookspath=[], hooksconfig={}, # 掛鉤配置選項由一個字典組成 runtime_hooks=[], excludes=[], # 假如你用的python有很多庫,但是你不需要用到某個,那么就把它添加到里面去,可以壓縮文件大小 win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False, ) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE( pyz, a.scripts, # 打包成EXE的腳本文件 # a.binaries, # 如果是單文件模式,則需要添加;多文件也可以添加 # a.zipfiles, # a.datas, [], exclude_binaries=True, # 是否排除二進制文件,為True時,為排除二進制的文件,當文件交大時包含二進制文件運行較快,如果是單文件,則沒有這個選項 name='main', # 打包程序的名字 debug=False, # 是否啟用調(diào)試功能 bootloader_ignore_signals=False, # runtime_tmpdir=None, # 生成單文件時需要這個參數(shù),定義運行時的臨時文件夾 strip=False, upx=True, # 打包的時候進行壓縮,F(xiàn)alse表示不壓縮;要用到一個壓縮程序UPX,用于壓縮文件,需要單獨下載 console=True, # 打包后的可執(zhí)行文件雙擊運行時屏幕會出現(xiàn)一個cmd窗口,不影響原程序運行,等于是是否加-w參數(shù) disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, """添加選項,初始化時沒有的""" icon="", # 指定應用程序的圖標,傳入路徑,可以相對路徑 ) coll = COLLECT( """ 如果是單文件模式,不需要這個COLLECT類,同時需要將: a.binaries, a.zipfiles, a.datas, 這些數(shù)據(jù)文件添加到EXE中 """ exe, a.binaries, a.zipfiles, a.datas, strip=False, upx=True, upx_exclude=[], name='main', )
如果需要更加詳細的打包語法,可以到官方文檔查看:https://pyinstaller.org/en/stable/index.html
在單文件模式下,不調(diào)用COLLECT,并且 EXE實例接收所有腳本、模塊和二進制文件
對于Analysis,我們主要要對
- script: 寫所有的py文件
- pathex:寫項目的地址,以及自定義庫的地址
- datas:靜態(tài)文件數(shù)據(jù)的地址
- binaries:二進制文件地址,如果有報錯,或者,需要用的時候再添加
其余的,不是常用的,直接運行不會影響程序的正常執(zhí)行,但是想要更加精細一點的話,建議根據(jù)上面的注釋來進行修改
3、 項目打包
然后,我們就需要將我們的項目進行打包了:
我們首先編寫main.spec文件:
# -*- mode: python ; coding: utf-8 -*- block_cipher = None a = Analysis( ['main.py', "demo1.py"], pathex=["D:\\35005\\桌面\\demoTest"], binaries=[], datas=[("config\\*.json", "config")], hiddenimports=[], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False, ) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE( pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='main', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, )
這里是進行單個文件的打包,打包完成后,我們需要把那個config文件夾移動到可執(zhí)行程序的同級目錄下,然后就可以運行成功了!
運行成功后的目錄結(jié)構(gòu)為:
最后,就可以把我們生成的程序發(fā)給別人使用啦!
總結(jié)
到此這篇關(guān)于pyinstaller的介紹與使用超詳細講解的文章就介紹到這了,更多相關(guān)pyinstaller介紹與使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
windows下Python安裝、使用教程和Notepad++的使用教程
這篇文章主要介紹了windows下Python安裝、使用教程和Notepad++的使用教程,需要的朋友可以參考下2019-10-10python利用urllib和urllib2訪問http的GET/POST詳解
urllib模塊提供的上層接口,使我們可以像讀取本地文件一樣讀取www和ftp上的數(shù)據(jù)。下面這篇文章主要給大家介紹了關(guān)于python如何利用urllib和urllib2訪問http的GET/POST的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-09-09Python線程池thread?pool創(chuàng)建使用及實例代碼分享
這篇文章主要介紹了Python線程池(thread?pool)創(chuàng)建使用及實例代碼分享,文章圍繞主題展開詳細的內(nèi)容介紹具有一定的參考價值,需要的小伙伴可以參考一下2022-06-06Python實現(xiàn)輸出程序執(zhí)行進度百分比的方法
這篇文章主要介紹了Python實現(xiàn)輸出程序執(zhí)行進度百分比的方法,涉及Python數(shù)值運算與系統(tǒng)輸出相關(guān)操作技巧,需要的朋友可以參考下2017-09-09