python打包

pyinstaller

  • 安装

      /******************安装命令********************/
      pip install pyinstaller 
    
  • 验证安装情况

      pip list
      /*************输出****************/
      pyinstaller               6.2.0
      pyinstaller-hooks-contrib 2023.10
    
  • 生成 spec文件

      pyinstaller xx.py
    
  • spec注释说明

      a = Analysis(
          ['python_to_exe.py'],       
          pathex=[],                    
          binaries=[],                
          datas=[],                   
          hiddenimports=[],           
          hookspath=[],               
          hooksconfig={},
          runtime_hooks=[],
          excludes=[],
          noarchive=False,
      )
      
      pyz = PYZ(a.pure)
    
      exe = EXE(
          pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='python_to_exe',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=True,
          disable_windowed_traceback=False,
          argv_emulation=False,
          target_arch=None,
          codesign_identity=None,
          entitlements_file=None,
      )
      coll = COLLECT(
          exe,
          a.binaries,
          a.datas,
          strip=False,
          upx=True,
          upx_exclude=[],
          name='python_to_exe',
      )
    
变量含义
aAnalysis类的实例,要求传入各种脚本用于分析程序的导入和依赖。
pyzPYZ的实例,是一个.pyz文件,包含了所有pure中的所有Python模块。
exeEXE类的实例,这个类是用来处理Analysis和PYZ的结果的,也是用来生成最后的exe可执行程序。
collCOLLECT类的实例,用于创建输出目录。在-F模式下,是没有COLLECT实例的,并且所有的脚本、模块和二进制文件都包含在了最终生成的exe文件中。
block_cipher加密密钥
Analysis参数变量含义
scripts它是一个脚本列表,可以传入多个py脚本
pathex默认spec的目录.
datas将本地文件打包时拷贝到目标路径下。datas是一个元素为元组的列表,每个元组有两个元素,都必须是字符串类型,元组的第一个元素为数据文件或文件夹,元组的第二个元素为运行时这些文件或文件夹的位置。例如:datas=[(’./src/a.txt’, ‘./dst’)],。
binaries添加二进制文件,也是一个列表,定义方式与datas参数一样
hiddenimports指定脚本中需要隐式导入的模块,比如在__import__、imp.find_module()、exec、eval等语句中导入的模块,这些模块PyInstaller是找不到的,需要手动指定导入,这个选项可以使用多次
hookspath指定额外hook文件(可以是py文件)的查找路径,这些文件的作用是在PyInstaller运行时改变一些Python或者其他库原有的函数或者变量的执行逻辑(并不会改变这些库本身的代码),以便能顺利的打包完成
runtime_hooks指定自定义的运行时hook文件路径(可以是py文件),在打好包的exe程序中,在运行这个exe程序时,指定的hook文件会在所有代码和模块之前运行,包括main文件,以满足一些运行环境的特殊要求
excludes指定可以被忽略的可选的模块或包,因为某些模块只是PyInstaller根据自身的逻辑去查找的,这些模块对于exe程序本身并没有用到
exe参数变量含义
console设置是否显示命令行窗口
icon设置程序图标,默认spec是没有的,需要手动添加,参数值就是图片路径的字符串

打包

资源路径

当有使用到资源文件时这个时候需要特别注意,由于资源文件需要拷贝到打包文件中,其路径层级就会发生变化,这个时候还使用 sys模块获取到的路径就会在打包后出现异常,因此可以通过以下这段代码获取获取整个软件的root目录,在以此目录为根目录层级查找资源文件。

def root(self):
        if getattr(sys, 'frozen', False):
            current_dir = sys._MEIPASS
        else:
            current_dir = os.path.dirname(os.path.abspath(__file__))
        file_path = os.path.join(current_dir, ".")
        return file_path

资源打包示例

#指定打包文件
file =  ['python_to_exe.py'],
#资源路径
#./resouce   即当前软件路径下的 resouce
#resouce     即打包后资源文件夹拷贝的路径
add_file=[('./resouce','resouce')]

a = Analysis(
    file,                       //指定打包文件列表
    pathex=['./'],              //指定打包路径        
    binaries=[],
    datas=add_file,             //指定资源文件列表
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
)
pyz = PYZ(a.pure)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name='python_to_exe',               # 打包exe输出名称
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=False,                      #关闭控制台输出
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
    icon='./idget.ico'                  #程序图标
)

图形化的配置pyinstaller进行打包的工具: auto-py-to-exe

pip install auto-py-to-exe
# 启动工具
auto-py-to-exe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值