如何在使用PyInstaller

时间:2018-05-14 20:47:49

标签: python-3.x macos bundle pyqt5 pyinstaller

我正在使用 PyQt5 (5.10)和 Python 3.6创建应用程序。 我正在使用 PyInstaller 捆绑我的应用程序。在 MacOS 上, PyInstaller创建一个名为dist的目录,其中包含可执行文件myapp和包myapp.app。 可执行文件完美运行。 捆绑myapp.app运行良好,但当我将重音字符é插入输入窗口小部件时,应用程序崩溃并显示错误:

UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 63: ordinal not in range(128)

myapp.app只包含按预期运行的可执行文件myapp

我已经测试过在空的环境下运行myapp

env -i ./myapp

我收到与myapp.app相同的错误。

定义了LANG

env -i LANG=fr_FR.UTF-8 ./myapp

没有错误。

所以,我现在知道问题与LANG environment variable有关。

现在,我的问题是:

如何创建我的包以允许myapp.app访问LANG环境变量?

非常感谢任何帮助。

这是我的PyInstaller规范文件:

# -*- mode: python -*-

import os
import sys

block_cipher = None

if os.name == 'nt':
    icon = 'images/icon.ico'
elif sys.platform == 'darwin':
    icon = 'images/icon.icns'
else:
    icon = None

a = Analysis(['../main.py'],
             pathex=['.'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
          cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='My App',
          debug=False,
          strip=False,
          upx=False,
          runtime_tmpdir=None,
          console=False, icon=icon)
app = BUNDLE(exe,
             name='My App.app',
             icon=icon,
             bundle_identifier='com.me.myapp',
             info_plist={
                 'NSHighResolutionCapable': 'True'
             },)

1 个答案:

答案 0 :(得分:0)

终于找到了解决我问题的方法。

我不确切地知道它崩溃的原因,但是,我不是打印str(my_value),而是将其发送到带有日志记录模块的日志文件中,并且不会再发生任何崩溃。

sys.getdefaultencoding()返回utf-8所以它仍然是个谜......所以我猜它必须与编码和stdio问题有关。