添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
首发于 就用python

python:pyinstaller打包可执行文件

安装

pip install pyinstaller

帮助信息

pyinstaller -h

查看版本

pyinstaller -version

单文件打包

PS E:\test-tool\fastbot-app> pyinstaller main.py  或  pyinstaller -D main.py

-D 的操作和不加的操作是一样的,不加是因为默认执行的也是 -D 操作。最终生成的 .exe 可执行文件名称为 main.exe

-D 创建一个包含可执行文件(默认)的文件夹包

多文件打包

可以先创建配置文件,然后进行配置:

PS E:\test-tool\fastbot-app> pyi-makespec main.spec

.spec文件

# -*- 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, 
          exclude_binaries=True,
          name='main',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=True,
          disable_windowed_traceback=False,
          target_arch=None,
          codesign_identity=None,
          entitlements_file=None )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas, 
               strip=False,
               upx=True,
               upx_exclude=[],
               name='main')

注意点:

  • Analsis 中的第一个列表参数,里面是专门批量放置.py文件,用于多文件打包
  • pathex 是我们程序的路径,要自己主动配置下,不然运行 .exe 执行文件会出现乱七八糟的异常错误
  • datas 是专门放置一些配置文件的,元组形式,文件路径,然后是文件的父级文件夹名称
  • hiddenimports 是设置第三方包,如果你程序汇总有第三方的包,要配置下,不然运行 .exe 执行文件时会出现导包问题
  • name 是设置exe执行文件的名称,默认读取的是运行的.py文件的名称,可自定义设置自己喜欢的名称
  • console 是设置是否显示控制台,如果为 True ,打包后运行 .exe 文件会显示命令行窗口

配置完成后就如下面这样:

# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['main.py', 'fastbotPage.py', 'handleMethods.py', 'logic.py', 'logsHandle.py', 'settings.py'],
             pathex=['E:\\test-tool\\fastbot-app'],
             binaries=[],
             datas=[
             ('Fastbot_Android\\*.jar', 'Fastbot_Android'),
             ('config\\test.ico', 'config'),
             ('config\\command.json', 'config'),
             ('config\\max.xpath.actions', 'config'),
             ('config\\ADBKeyboard.apk', 'config'),
             ('config\\test.ico', 'config')
             hiddenimports=['jinja2'],
             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='fastbotSetup',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True,
          disable_windowed_traceback=False,
          target_arch=None,