py2exe: UnicodeDecodeError (не может декодировать байт 0xd1) - PullRequest
0 голосов
/ 09 февраля 2012

Я пытаюсь заморозить свое приложение для Windows. Он использует PyQt4 и был построен на Python 2.7. Все компилируется и работает хорошо, но только на моем ПК. На другом ПК, на котором не установлен Python , возникает ошибка:

 File "quirinus.py", line 4, in <module>
 File "zipextimporter.pyc", line 82, in load_module
 File "bin\core.pyc", line 17, in <module>
 File "bin\xstring.pyc", line 19, in str2unicode
 File "encodings\utf_8.pyc", line 16, in decode
UnicodeDecodeError: 'utf8' codec can't decode byte 0xd1 in position 3: invalid continuation byte

Вот код моего setup.py:

from distutils.core import setup
import py2exe, sys, os
from glob import glob
data_files = [('Microsoft.VC90.CRT', glob(r'..\Microsoft.VC90.CRT\*.*'))]
sys.path.append(r'..\Microsoft.VC90.CRT')
sys.argv.append('py2exe')

py2exe_options = dict(
  includes=['sip',
            'encodings',
            'encodings.ascii',
            'encodings.utf_8',
            'encodings.cp866'],
  excludes=['_ssl', 'pyreadline', 'difflib', 'doctest',
    'tarfile', 'bz2', 'zipfile', 'optparse', 'pickle',
    'pywin', 'pywin.debugger', 'pywin.debugger.dbgcon',
    'pywin.dialogs', 'pywin.dialogs.list',  'calendar',
    'Tkconstants', 'Tkinter', 'tcl', '_gtkagg', '_tkagg',
    'bsddb', 'curses', 'email', 'Tkconstants', 'Tkinter'],
  dll_excludes=['msvcp90.dll', 'msvcr90.dll', 'msvcm90.dll',
    'libgdk-win32-2.0-0.dll', 'libgobject-2.0-0.dll',
    'tcl84.dll', 'tk84.dll'],
  compressed=True
)

setup(
  name='Quirinus',
  author='Dmitriy Selyutin',
  author_email='ghostmansd@google.com',
  description='Quirinus: Dictionary',
  version='0.1',
  windows = \
  [
    {
      'script': 'quirinus.py',
      'icon_resources': [(0, 'icons/icon.ico')]
    }
  ],
  options={'py2exe': py2exe_options},
  zipfile = None,
  data_files = data_files
  )

Вот команда для запуска заморозки: python.exe .\setup.py py2exe -b 1

Каждый исходный файл в моем проекте имеет строку «кодировка» в начале:

# coding: UTF-8

Поскольку я думаю, что я сделал все, чтобы Юникод работал хорошо. И это работает на каждом компьютере с Python. :-) Но когда на компьютере нет Python, приложение не работает. Кто-нибудь сталкивался с этой проблемой?

P.S. Я также пытался заморозить с помощью PyInstaller (python.exe .\pyinstaller.py -F -w), но зависшее приложение не запускается. И да, все мои строки в источнике имеют следующую форму: u'string '.

1 Ответ

0 голосов
/ 09 февраля 2012

Не думаю, что проблема связана с тем, установлен ли python на другом ПК.Я думаю, вам следует еще раз взглянуть на характеристики процессора на другом ПК по сравнению с вашими характеристиками.

Замораживание может зависеть от процессора, поэтому у вас могут возникнуть проблемы с кросс-совместимостью

...