【问题标题】:How to fix msgcat::mc error after running app from PyInstaller on MacOS Mojave?在 MacOS Mojave 上从 PyInstaller 运行应用程序后如何修复 msgcat::mc 错误?
【发布时间】: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.apppyapp.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"

【问题讨论】:

标签: python python-3.x tkinter pyinstaller


【解决方案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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-21
    • 2019-07-11
    • 2019-01-14
    • 2020-07-16
    • 2019-02-24
    • 2015-07-24
    • 2019-06-25
    • 1970-01-01
    相关资源
    最近更新 更多