pyinstaller 打包python文件成可执行文件

2019-11-12  本文已影响0人  CrystalZhu

使用pyinstaller打包

1. 安装pyinstaller

 pip3 install pyinstaller

2. 打包

pyinstaller -F EncootechServer.py

执行以后会生成一个 EncootechServer.spec 文件和dist build 两个文件夹
注意: EncootechServer.py文件应该放在项目的最外层, 否则会导致pyinstaller打包时找不到py文件中使用的module信息,无法将第三方module打包进去

3. 需要打包资源文件时,需要对spec进行配置

项目文件包含:1.Python源代码文件;2.图标资源文件;3.其它资源文件(html和wda的Xcode项目)
Python源代码文件在server目录下, html文件在server/static目录下,Xcode项目在server/app目录下

3.1 spec文件生成

为了进行自定义配置的打包,首先需要编写打包的配置文件.spec文件。当使用pyinstaller -d xxx.py时候会生成默认的xxx.spec文件进行默认的打包配置。通过配置spec脚本,并执行pyinstaller -d xxx.spec完成自定义的打包。
通过生成spec文件的命令,针对代码的主程序文件生成打包对应的spec文件
打开生成的spec文件,修改其默认脚本,完成自定义打包需要的配置。spec文件是一个python脚本,其默认的结构如下例所示

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['EncootechServer.py'],
             pathex=['/Users/crystalzhu/AutoTest/Digi4th_iOS_server'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             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='EncootechServer',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=False )
app = BUNDLE(exe,
             name='EncootechServer.app',
             icon=None,
             bundle_identifier=None)

spec文件中主要包含4个class: Analysis, PYZ, EXE和COLLECT.

Analysis以py文件为输入,它会分析py文件的依赖模块,并生成相应的信息

PYZ是一个.pyz的压缩包,包含程序运行需要的所有依赖

EXE根据上面两项生成

COLLECT生成其他部分的输出文件夹,COLLECT也可以没有

3.2 spec文件配置
这里我们把 datas改为:
datas=[('/Users/crystalzhu/AutoTest/Digi4th_iOS_server/server/static', 'static'),('/Users/crystalzhu/AutoTest/Digi4th_iOS_server/server/app', 'app')],

datas接收元组,元祖的组成为(原来项目中资源文件路径, 打包后路径)
3.3 重新执行pyinstaller指令
删除之前执行pyinstaller生成的dict文件夹和build文件夹, 然后执行:
'''json
pyinstaller -F EncootechServer.spec
'''
根据我们的配置生产可执行文件

重点: 拷贝资源文件目录app和static到生成目录下的dist目录下
上一篇下一篇

猜你喜欢

热点阅读