我正在使用 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'
},)
答案 0 :(得分:0)
终于找到了解决我问题的方法。
我不确切地知道它崩溃的原因,但是,我不是打印str(my_value)
,而是将其发送到带有日志记录模块的日志文件中,并且不会再发生任何崩溃。
sys.getdefaultencoding()
返回utf-8
所以它仍然是个谜......所以我猜它必须与编码和stdio问题有关。