1. 打包命令
pyinstaller app.py -D -w #app.py指项目启动文件
-F:仅仅生成一个文件,不暴露其他信息,启动较慢。
-D:生成一个文件夹,里面是多文件模式,启动快。
-w:窗口模式打包,不显示控制台。
-c:跟图标路径,作为应用icon。
运行上述命令如果你打的包能成功运行说明你很幸运,如果报缺少模块 ,Invalid async_mode specified或者
AttributeError: 'NoneType' object has no attribute 'isatty'等一些列错误,那说明你的打包环境需
要手动更改
2. 生成app.spec文件
block_cipher = None
SETUP_DIR = r'F:\Users\Administrator\Desktop\工作内容\11_viewer_后端'
a = Analysis(['app.py'],
pathex=['F:\\Users\\Administrator\\Desktop\\工作内容\\11_viewer_后端'],
binaries=[],
datas=[(SETUP_DIR+'/static', 'static'), (SETUP_DIR+'/templates', 'templates')],
hiddenimports=['sklearn.utils._typedefs','sklearn.neighbors._typedefs',
'engineio.async_gevent ','gevent','pysqlite2', 'MySQLdb','flask_socketio',
'pkg_resources.py2_warn','pkg_resources.markers', 'importlib_resources.trees',
'engineio.async_drivers.threading', 'typing'],
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='app',
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='app')
2.1 Invalid async_mode specified
如上所示,如果你运行程序提示Invalid async_mode specified说明你用到flask_socketio的库,这时候你需要先把项目中async_mode 参数删除,然后在app.spec中的hiddenimports参数中添加’engineio.async_gevent’,‘gevent’,‘pysqlite2’,‘MySQLdb’,‘flask_socketio’,‘pkg_resources.py2_warn’,‘pkg_resources.markers’, ‘importlib_resources.trees’, 'engineio.async_drivers.threading’等参数再次运行pyinstaller app.spec命令打包即可。
2.2 AttributeError: ‘NoneType’ object has no attribute ‘isatty’
这个问题的主要原因是flask和werkzeug库的原因,题主本来用的是2.0.1版本,后来更新到2.0.3版本即可正常使用
|