Какие зависимости требуются для Python, чтобы избежать UnicodeDecodeError? - PullRequest
3 голосов
/ 13 июня 2011

Я использую компоновку Python коллектива *1001*. Он собирает различные версии Python, включая 2.6 и 2.7.

Почему-то, когда я пытаюсь сделать релиз с 2.7, я получаю эту ошибку:

$ /Users/aclark/Developer/collective/python/python-2.7/bin/mkrelease -T -d local
…
adding 'plonetheme.grungeera-0.1.1/plonetheme.grungeera.egg-info/dependency_links.txt'
adding 'plonetheme.grungeera-0.1.1/plonetheme.grungeera.egg-info/entry_points.txt'
adding 'plonetheme.grungeera-0.1.1/plonetheme.grungeera.egg-info/namespace_packages.txt'
adding 'plonetheme.grungeera-0.1.1/plonetheme.grungeera.egg-info/not-zip-safe'
adding 'plonetheme.grungeera-0.1.1/plonetheme.grungeera.egg-info/PKG-INFO'
adding 'plonetheme.grungeera-0.1.1/plonetheme.grungeera.egg-info/requires.txt'
adding 'plonetheme.grungeera-0.1.1/plonetheme.grungeera.egg-info/SOURCES.txt'
adding 'plonetheme.grungeera-0.1.1/plonetheme.grungeera.egg-info/top_level.txt'
removing 'plonetheme.grungeera-0.1.1' (and everything under it)
running register
running check
Traceback (most recent call last):
  File "<string>", line 22, in <module>
  File "setup.py", line 36, in <module>
    """,
  File "/Users/aclark/Developer/collective/python/parts/opt/lib/python2.7/distutils/core.py", line 152, in setup
    dist.run_commands()
  File "/Users/aclark/Developer/collective/python/parts/opt/lib/python2.7/distutils/dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "/Users/aclark/Developer/collective/python/parts/opt/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/distribute-0.6.15-py2.7.egg/setuptools/command/register.py", line 9, in run
    _register.run(self)
  File "/Users/aclark/Developer/collective/python/parts/opt/lib/python2.7/distutils/command/register.py", line 51, in run
    self.run_command(cmd_name)
  File "/Users/aclark/Developer/collective/python/parts/opt/lib/python2.7/distutils/cmd.py", line 326, in run_command
    self.distribution.run_command(command)
  File "/Users/aclark/Developer/collective/python/parts/opt/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/Users/aclark/Developer/collective/python/parts/opt/lib/python2.7/distutils/command/check.py", line 69, in run
    self.check_restructuredtext()
  File "/Users/aclark/Developer/collective/python/parts/opt/lib/python2.7/distutils/command/check.py", line 111, in check_restructuredtext
    for warning in self._check_rst_data(data):
  File "/Users/aclark/Developer/collective/python/parts/opt/lib/python2.7/distutils/command/check.py", line 138, in _check_rst_data
    parser.parse(data, document)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/__init__.py", line 157, in parse
    self.statemachine.run(inputlines, document, inliner=self.inliner)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 170, in run
    input_source=document['source'])
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/statemachine.py", line 233, in run
    context, state, transitions)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/statemachine.py", line 454, in check_line
    return method(match, context, next_state)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 2706, in underline
    self.section(title, source, style, lineno - 1, messages)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 329, in section
    self.new_subsection(title, lineno, messages)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 398, in new_subsection
    node=section_node, match_titles=1)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 284, in nested_parse
    node=node, match_titles=match_titles)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 195, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/statemachine.py", line 233, in run
    context, state, transitions)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/statemachine.py", line 454, in check_line
    return method(match, context, next_state)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 2706, in underline
    self.section(title, source, style, lineno - 1, messages)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 329, in section
    self.new_subsection(title, lineno, messages)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 398, in new_subsection
    node=section_node, match_titles=1)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 284, in nested_parse
    node=node, match_titles=match_titles)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 195, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/statemachine.py", line 233, in run
    context, state, transitions)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/statemachine.py", line 454, in check_line
    return method(match, context, next_state)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 2706, in underline
    self.section(title, source, style, lineno - 1, messages)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 329, in section
    self.new_subsection(title, lineno, messages)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 398, in new_subsection
    node=section_node, match_titles=1)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 284, in nested_parse
    node=node, match_titles=match_titles)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 195, in run
    results = StateMachineWS.run(self, input_lines, input_offset)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/statemachine.py", line 233, in run
    context, state, transitions)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/statemachine.py", line 454, in check_line
    return method(match, context, next_state)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 2646, in blank
    self.parent += self.literal_block()
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/parsers/rst/states.py", line 2740, in literal_block
    literal_block = nodes.literal_block(data, data)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/nodes.py", line 807, in __init__
    TextElement.__init__(self, rawsource, text, *children, **attributes)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/nodes.py", line 795, in __init__
    textnode = Text(text)
  File "/Users/aclark/Developer/collective/python/python-2.7/lib/python2.7/site-packages/docutils/nodes.py", line 331, in __new__
    return reprunicode.__new__(cls, data)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 32: ordinal not in range(128)
register failed

Однако, если я использую Python 2.6:

$ /Users/aclark/Developer/collective/python/python-2.6/bin/mkrelease -T -d local

Нет UnicodeDecodeError. Все работает как положено.

Обычно это заставляет меня думать, что что-то не так со средой, в которой был скомпилирован Python (Mac OS X), но в этом случае и 2.6, и 2.7 были скомпилированы в одной и той же среде, но одна работает, а другая - нет.

Что здесь может пойти не так? Что я могу посмотреть / проверить, чтобы выяснить это?

Ответы [ 2 ]

1 голос
/ 13 июня 2011

Я думаю, что вот что отличается: версия Docutils в обеих установках Python.

В пакете Docutils все еще ведется постоянная работа, и этот проект выпускает текущий Subversion HEAD в качестве снимка на обычномоснова.Номера строк в вашей трассировке Python 2.7, похоже, соответствуют последнему снимку (который в соответствии с заголовками загрузки был выпущен 1 сентября 2010 г.).

Я вполне уверен, что каталог сайтов-пакетов Python 2.6отличается от той, что установлена ​​в Python 2.7.

Выполнить:

diff -ur python-2.6/lib/python2.6/site-packages/docutils python-2.7/lib/python2.7/site-packages/docutils 

, чтобы подтвердить это.Если я прав, просто скопируйте версию из дерева 2.6 в дерево 2.7, и Python 2.7 перекомпилирует их при импорте, или используйте скрипт compileall.py:

python-2.7/bin/python python-2.7/lib/python2.7/compileall.py lib/python2.7/site-packages/docutils
0 голосов
/ 13 июня 2011

Это происходит потому, что Python считывает некоторые данные из файла, который не является ascii.Кодировка по умолчанию на Python - ascii, и ascii поддерживает только 7-битные символы (<128). </p>

У вас есть несколько вариантов, чтобы исправить эту ошибку:

  • указать pythonиспользовать правильную кодировку для этого файла
  • читать файл как двоичный файл и работать с байтами вместо строк (менее вероятно)
  • изменить кодировку Python по умолчанию на использование utf-8 (немного рискованно)

Кстати, я попытался запустить bin / buildout в моей системе, но это не удалось (позже), поскольку он использует некоторые параметры командной строки, не поддерживаемые компилятором.

gcc -c -fno-strict-aliasing -Wno-long-double -no-cpp-precomp -mno-fused-madd -DNDEBUG -g -O3 -Wall -Wstrict-prototypes -I. -I./Include  -DPy_BUILD_CORE -o Modules/python.o     Modules/python.c
cc1: error: unrecognized command line option "-Wno-long-double"

i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)
...