Как настроить LANG при создании пакета с PyInstaller - PullRequest
0 голосов
/ 14 мая 2018

Я создаю приложение с 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 голосов
/ 16 мая 2018

Наконец-то нашел решение моей проблемы.

Я не знаю точно, почему он вышел из строя, но вместо печати str(my_value) я отправляю его в файл журнала с модулем ведения журнала, и больше нет сбоев.

sys.getdefaultencoding() возвращает utf-8 так что это останется загадкой ... Так что я думаю, это должно быть связано с проблемой кодирования и stdio.

...