使用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目录下
网友评论