pyinstaller模組主要用於python程式碼打包成exe程式直接使用,這樣在其它電腦上即使沒有python環境也是可以運作的。
pyinstaller屬於第三方函式庫,因此在使用的時候需事先安裝
pip install pyinstaller
1.設定產生exe程式資料夾
(1)如果不熟悉spec設定內容,可以在終端機執行下列指令產生固定範本
pyinstaller --name myapp main.py # myapp为生成的spec文件名称,main.py为打包的文件
運行之後,我們可以看到幾個文件,可以直接刪除dist和build文件。我看打開myapp.spec檔案可以看見設定資訊。
# -*- mode: python ; coding: utf-8 -*- block_cipher = None a = Analysis( ['main.py','hello.py'], #注:要打包的模块,按照先后顺序运行 pathex=['C:/Users/pythonProject'], #注:要打包的Python源代码的路径列表。 binaries=[], datas=[], #注:要打包的非Python资源(例如图像、配置文件等)列表。 hiddenimports=[''requests], #注:必需的隐藏导入列表,用于告诉PyInstaller找到其他未明确指定的依赖项。 hookspath=[], #注:一个路径列表,其中包含指定要自定义的钩子模块的目录。 hooksconfig={}, #注: runtime_hooks=[], #注:用于在应用程序运行时运行的Python代码文件列表。 excludes=[], #注:不包括在生成的可执行文件中的模块列表 win_no_prefer_redirects=False, #注: win_private_assemblies=False, cipher=block_cipher, #注:用于加密Python字节码的密码。 noarchive=False, ) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) #注:a.pure: 一个布尔值,指示是否生成纯Python字节码。如果为True,则PyInstaller将不包括任何二进制文件或库。
a.zipped_data: 用於包含OneFile模式下的所有Python腳本和資源的元組。
exe = EXE( pyz, #注:一个PYZ实例,其中包含要打包的所有Python脚本和资源。 a.scripts, #注:应用程序的主Python脚本列表。 [], exclude_binaries=True, name='myapp', #注:生成exe可执行文件的名称 debug=False, #注:一个布尔值,指示是否生成调试版本的可执行文件 bootloader_ignore_signals=False, #注:一个布尔值,指示是否忽略启动加载器的信号。 strip=False, #注:一个布尔值,指示是否对可执行文件进行符号剥离。 upx=True, #注:一个布尔值,指示是否使用UPX压缩可执行文件 console=True, #注:是否开启dos窗口 disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, icon:'图标.ico' #注:用户生成exe文件的封面,后缀必须是ico格式,转换地址:https://convertio.co/zh/download/88c5806204642c8a1c10e65b1bef9b5886f6d8/ ) coll = COLLECT( exe, #注:你的Python脚本生成的可执行文件路径(通常是与spec文件同名的文件) a.binaries, #注:二进制对象列表,表示其他相关二进制文件的位置以及将它们复制到输出目录的相对路径。例如,如果您的应用程序需要音频或图像文件,则可以使用此参数将其包含在可执行文件中。 a.zipfiles, #注:压缩文件列表,表示应该从zip文件中提取哪些文件并将它们放入输出目录。这对于打包一些必需的库或数据文件非常有用。 a.datas, #注:数据文件列表,这些文件不应被压缩,但应该被复制到输出目录中。例如,这可能包括配置文件、模板文件或其他类型的文本文件。 strip=False, #注:是否从可执行文件和库中去除调试信息。默认情况下为True,这将减小文件大小,但会使得调试更加困难。 upx=True, #注:是否使用UPX来压缩可执行文件和库。默认情况下为False,因为UPX可能会导致某些文件无法正常工作。 upx_exclude=[], #注: name='myapp', #注:打包文件夹名称。 )
(3)通常我們只需要設定需要打包的模組 pathex 產生exe檔的名稱 exe存在目錄的名稱,配置完後直接在終端輸入指令進行打包。
pyinstaller myapp.spec
(4)打包完成後在專案所在目錄下可以看下dist文件,dist文件下一目錄就是打包資料夾,資料夾下面就是所在的程式。需要注意的是,由於我們打包的是整個資料夾,因此在分享給他人使用時,需要發送整個資料夾才能確保正確運作。
(5)配置要打包的模組,若模組之間存在import連接,可直接打包最終(main)運行的那個模組即可,pyinstaller會預設把main涉及的impor(.py 第三方函式庫)全部一起打包。若兩個py模組相互沒有任何關聯,這個時候可以打包多個。
2.設定產生獨立的exe檔
(1)這裡和上面步驟一樣,先生成模板
pyinstaller -F main.py
(2)模板大概樣式如下,字段意思和上面一致。
# -*- mode: python ; coding: utf-8 -*- block_cipher = None a = Analysis( ['main.py'], pathex=[], binaries=[], datas=[], 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='hello', 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, )
(3)配置完成後終端機執行指令打包,打包完成後會看見dist目錄下只有一個exe檔。
pyinstaller myapp.spec
除了設定spec文件,還可以直接透過pyinstaller指令來直接打包,這裡就不做多介紹了
#以上是Python pyinstaller函式庫怎麼安裝配置的詳細內容。更多資訊請關注PHP中文網其他相關文章!