Ответ 1
2016 ОБНОВЛЕНИЕ: Оказывается, что это ошибка Python, по крайней мере, с 2013 года, вероятно, и раньше, состоящая в том, что Python не реагирует хорошо к не-GNU-локалам - как и в Mac OS X и BSD. Ошибка по-прежнему открыта по состоянию на сентябрь 2016 года и затрагивает каждую версию Python.
Если не было набора переменных среды LANG
, скорее всего, у вас была либо переменная окружения LC_CTYPE
(ключевая переменная), либо LC_ALL
(которая переопределяет, если установлена), а переменная окружения UTF-8
, которая не является действительный язык OS X. Достаточно легко воспроизвести поставляемый Apple /usr/bin/python
или с помощью специального python, как в вашем случае, который был построен с 10.6 SDK (вероятно, также 10.5 SDK). Вы не сможете воспроизвести его с помощью python.org python; они в настоящее время построены с 10.4 SDK, где API-интерфейсы locale ведут себя по-разному.
$ unset LANG
$ env | grep LC_
$ export LC_CTYPE="UTF-8"
$ /usr/bin/python # Apple-supplied python
Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale ; locale.getdefaultlocale()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py", line 459, in getdefaultlocale
return _parse_localename(localename)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py", line 391, in _parse_localename
raise ValueError, 'unknown locale: %s' % localename
ValueError: unknown locale: UTF-8
^D
$ /usr/local/bin/python2.6 # python.org python
Python 2.6.4 (r264:75821M, Oct 27 2009, 19:48:32)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale ; locale.getdefaultlocale()
(None, 'mac-roman')
>>>
EDIT:
В головоломке может быть еще одна часть. Быстрый просмотр bzr
2.0.1, который я установил, указывает, что сообщение, которое вы цитируете, должно отображаться только в том случае, если locale.getpreferredencoding()
вызывает locale.Error
. Один из способов, который может произойти, - это не поддерживать загрузку python _locale.so
C, и это может произойти, если на нем есть проблемы с правами. Например, в настоящее время известно, что MacPorts имеет проблемы с установкой разрешений, если у вас настроенный umask; Я сам был сожжен этим вопросом. Проверьте разрешения _locale.so
в каталоге python lib/python2.5/lib-dynload
и убедитесь, что это 755
. Полный путь для MacPorts должен быть:
/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload/