在 MacOS Mojave 上从 PyInstaller 运行应用程序后如何修复 msgcat::mc 错误?
Posted
技术标签:
【中文标题】在 MacOS Mojave 上从 PyInstaller 运行应用程序后如何修复 msgcat::mc 错误?【英文标题】:How to fix msgcat::mc error after running app from PyInstaller on MacOS Mojave? 【发布时间】:2019-05-11 16:47:14 【问题描述】:我正在尝试使用 PyInstaller 3.4 和 Python 3.6.8(不是 brew,从 python.org 安装)为 MacOS 创建我的项目的捆绑应用程序。应用程序第一次运行出现错误:
[2195] Failed to execute script pyi_rth__tkinter
我在https://github.com/pyinstaller/pyinstaller/issues/3753#issuecomment-432464838 上找到了解决此问题的方法。之后 AppName.app/Contents/MacOS/AppName 的运行没有任何错误。但如果我尝试运行 AppName.app,它会给出:
File "tkinter/__init__.py", line 2023, in __init__
_tkinter.TclError: invalid command name "msgcat::mc"
为确保项目代码或为PyInstaller手动创建的spec
-file没有问题,我写了一个简单的脚本:
import sys
import logging
from pathlib import Path
import tkinter as tk
logging.basicConfig(
filename=Path('~/Desktop/pyapp.log').expanduser()
)
logger = logging.getLogger()
try:
tk._test()
except Exception as e:
logger.exception(e)
finally:
sys.exit()
使用pyinstaller main.py --windowed
创建捆绑包,其行为相同。运行dist/main.app
后pyapp.log
的内容:
ERROR:root:invalid command name "msgcat::mc"
Traceback (most recent call last):
File "main.py", line 12, in <module>
File "tkinter/__init__.py", line 3988, in _test
File "tkinter/__init__.py", line 2023, in __init__
_tkinter.TclError: invalid command name "msgcat::mc"
【问题讨论】:
我运行了代码,当我运行 dist/main/main.exe 时它运行良好。但由于某种原因,更新到 Mojave 后,.app 甚至无法在我的 Mac 上打开。我认为 PyInstaller 还不支持 Mojave 上的 tkinter GUI。我可能错了,因为 Kivy GUI .app 与--noconsole
标志配合得很好。
谢谢,但不幸的是,Kivy 不是该项目的选项。
这是github.com/pyinstaller/pyinstaller/issues/3820 这是 tk/console.tcl 文件中的错误。 github.com/pyinstaller/pyinstaller/issues/…github.com/pyinstaller/pyinstaller/issues/…
【参考方案1】:
PyInstaller 无法在 macos 上正确复制 tkinter 和 tcl 数据。我为手动编写了一个脚本:
#!/bin/bash
app_root="dist/APPNAME.app/Contents/MacOS"
python_path="/Library/Frameworks/Python.framework/Versions/3.6/lib"
cp -r "$python_path/tcl8" "$app_root/tcl8"
cp -r "$python_path/tcl8.6" "$app_root/tcl"
cp -r "$python_path/tk8.6" "$app_root/tk"
【讨论】:
以上是关于在 MacOS Mojave 上从 PyInstaller 运行应用程序后如何修复 msgcat::mc 错误?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 macOS 10.14.4 Mojave 上使用 fink
text 在macOS Mojave上设置PHP 7.2(带自制软件)