You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PyInstaller打包程序通过Windows「打开方式」启动执行失败问题及解决

解决PyInstaller打包GUI程序通过文件关联启动时的Fatal Error问题

问题背景

我需要让自己的Python GUI程序支持通过系统「打开方式」打开.mft格式文件,但遇到了一个奇怪的异常:

  • 正常场景:直接双击程序或者通过命令提示符启动时,程序运行完全正常
  • 异常场景:右键点击.mft文件选择「打开方式」,再选中打包后的myexe_to_open_mft.exe时,程序立刻弹出错误:Fatal error, failed to execute script

我使用的PyInstaller打包命令如下:

pyinstaller --windowed -i icon.ico PickleViewer.py

解决方法

经过排查,我通过ctypes库隐藏控制台的方式解决了该问题。推测原因是:当通过文件关联启动程序时,系统的控制台环境初始化出现了冲突,隐藏控制台后规避了这一异常。

完整PyInstaller打包日志

162 INFO: PyInstaller: 3.5
162 INFO: Python: 3.7.4
163 INFO: Platform: Windows-10-10.0.18362-SP0
173 INFO: wrote C:\Users\user\Documents\Python\Documents\pickle_viewer\PickleViewer.spec
177 INFO: UPX is not available.
179 INFO: Extending PYTHONPATH with paths ['C:\\Users\\user\\Documents\\Python\\Documents\\pickle_viewer', 'C:\\Users\\user\\Documents\\Python\\Documents\\pickle_viewer']
180 INFO: checking Analysis
199 INFO: Building because C:\Users\user\Documents\Python\Documents\pickle_viewer\PickleViewer.py changed
200 INFO: Initializing module dependency graph...
206 INFO: Initializing module graph hooks...
211 INFO: Analyzing base_library.zip ...
5148 INFO: running Analysis Analysis-00.toc
5191 INFO: Adding Microsoft.Windows.Common-Controls to dependent assemblies of final executable required by c:\users\user\appdata\local\programs\python\python37-32\python.exe
8448 INFO: Caching module hooks...
8463 INFO: Analyzing C:\Users\user\Documents\Python\Documents\pickle_viewer\PickleViewer.py
8789 INFO: Loading module hooks...
8789 INFO: Loading module hook "hook-encodings.py"...
8936 INFO: Loading module hook "hook-pydoc.py"...
8938 INFO: Loading module hook "hook-xml.py"...
9298 INFO: Loading module hook "hook-_tkinter.py"...
9871 INFO: checking Tree
9931 INFO: checking Tree
9984 INFO: Looking for ctypes DLLs
9985 INFO: Analyzing run-time hooks ...
9989 INFO: Including run-time hook 'pyi_rth__tkinter.py'
9996 INFO: Looking for dynamic libraries
17315 INFO: Looking for eggs
17316 INFO: Using Python library c:\users\user\appdata\local\programs\python\python37-32\python37.dll
17316 INFO: Found binding redirects: []
17331 INFO: Warnings written to C:\Users\user\Documents\Python\Documents\pickle_viewer\build\PickleViewer\warn-PickleViewer.txt
17397 INFO: Graph cross-reference written to C:\Users\user\Documents\Python\Documents\pickle_viewer\build\PickleViewer\xref-PickleViewer.html
17499 INFO: checking PYZ
17501 INFO: Building because toc changed
17502 INFO: Building PYZ (ZlibArchive) C:\Users\user\Documents\Python\Documents\pickle_viewer\build\PickleViewer\PYZ-00.pyz
18467 INFO: Building PYZ (ZlibArchive) C:\Users\user\Documents\Python\Documents\pickle_viewer\build\PickleViewer\PYZ-00.pyz completed successfully.
18499 INFO: checking PKG
18501 INFO: Building because C:\Users\user\Documents\Python\Documents\pickle_viewer\build\PickleViewer\PYZ-00.pyz changed
18502 INFO: Building PKG (CArchive) PKG-00.pkg
18549 INFO: Building PKG (CArchive) PKG-00.pkg completed successfully.
18554 INFO: Bootloader c:\users\user\appdata\local\programs\python\python37-32\lib\site-packages\PyInstaller\bootloader\Windows-32bit\runw.exe
18556 INFO: checking EXE
18556 INFO: Building because console changed
18556 INFO: Building EXE from EXE-00.toc
18651 INFO: Copying icons from ['icon.ico']
18754 INFO: Writing RT_GROUP_ICON 0 resource with 20 bytes
18755 INFO: Writing RT_ICON 1 resource with 22767 bytes
19067 INFO: Appending archive to EXE C:\Users\user\Documents\Python\Documents\pickle_viewer\build\PickleViewer\PickleViewer.exe
19249 INFO: Building EXE from EXE-00.toc completed successfully.
19266 INFO: checking COLLECT
WARNING: The output directory "C:\Users\user\Documents\Python\Documents\pickle_viewer\dist\PickleViewer" and ALL ITS CONTENTS will be REMOVED! Continue? (y/N)y
21243 INFO: Removing dir C:\Users\user\Documents\Python\Documents\pickle_viewer\dist\PickleViewer
21736 INFO: Building COLLECT COLLECT-00.toc
33512 INFO: Building COLLECT COLLECT-00.toc completed successfully.

内容的提问来源于stack exchange,提问作者Matix

火山引擎 最新活动