如何在使用 PyInstaller 创建bundle时设置 LANG



我正在创建一个使用PyQt5(5.10( 和Python3.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'
},)

我遇到了同样的问题,而不是输出到日志文件。我将标准输出的utf-8重新配置为以下命令:

sys.stdout.reconfigure(encoding='utf-8'(

也许它可以解决您的问题。

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

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

sys.getdefaultencoding()utf-8回来了,所以它仍然是一个谜......所以我想它一定与编码和标准问题有关。

最新更新