Mac Version of Python не поддерживает UTF-8 в модуле Curses?
Вопрос
Я пытаюсь отобразить много текста Unicode в моих проклятиях. Моя машина развития MacOSX 10.6, и я использую Python по умолчанию, поставляемый с Apple.
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Когда я добавил текст Unicode на экран, экран все запутался. Я пытался Google для решения, и другие люди предложили связать модуль _Curses с библиотекой libncursesw вместо libncurse библиотеки.
Я проверил свой путь, и я нашел (см. Ниже) в / opt / local / lib
libncurses++.a
libncurses++w.a
libncurses.5.dylib
libncurses.a
libncurses.dylib
libncursesw.5.dylib
libncursesw.a
libncursesw.dylib
Как я могу проверить, к какой библиотеке мою библиотеку модуль, и как я могу ссылаться с другой библиотекой? Можно ли сделать это без перекомпилирования моего питона?
Это вроде смущено, но я полагаю, что решение правильно печатает Unicode в моей среде. Я думаю, что в какой-то момент я сделал библиотеки проклятий от MacPorts и забыл, что у меня уже есть.
Проблема, которую текст не отображал первый раз, потому что мне нужно установить локаль в мою программу Python. Я думал, что параметр локали наследует от оболочки, которую я бегу, но просто добавил две строки кода исправить мою проблему:
import locale
locale.setlocale(locale.LC_ALL,"")
Хотя приятно знать, где живет внешняя библиотека Python и как их проверить.
Решение
Чтобы проверить, какой другой .so
са .so
использует, использовать otool -L
-- Например:
$ otool -L /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload/_curses.so
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload/_curses.so:
/Library/Frameworks/Python.framework/Versions/2.6/lib/libncurses.5.dylib (compatibility version 5.0.0, current version 5.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.3.10)
Это то, что у меня есть на моем Python 2.6.4 Установить на OSX 10.5 - поскольку вы используете собственный Python Apple на 10.6, точное местоположение вашего _curses.so
будет другой, просто делай
$ python
>>> import _curses
>>> _curses.__file__
чтобы точно увидеть, где _curses.so
интерес, то звонить otool -L
в теме.
Замена A. .so
На системе, установленный Python, кажется, чреват опасностью для меня - вы мог сломайте что-нибудь и в конечном итоге, чтобы переустановить ОС и т. Д. Почему не установить загрузку Python с python.org
вместо?
Получить оба .dmg
И источники для самого последнего выпуска 2.6 (если вы не так приключенны, вы хотите попробовать кандидата выпуска 2.7 ;-), тогда вы можете установить .dmg
(это пойдет к /usr/local
, нет перезаписать систему Python; Установите свой путь соответственно в свой .bashrc
Или где бы иметь /usr/local/bin
на вашем пути впереди /usr/bin
), тогда, если ваша проблема не устранена, вы можете восстановить из источников с любыми вариантами, которые вы хотите, и замените конкретные _curses.so
В локальной установке, не нарушая системный каталог вообще (кажется, самый разумный для меня ...).
Другие советы
Приставленный Apple Python 2.6 поставляется с OS X 10.6 здесь:
$ cd /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload
$ otool -L _curses*
_curses.so:
/usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.1)
_curses_panel.so:
/usr/lib/libpanel.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
/usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.1)
Было бы очень плохое идею, чтобы попытаться что-то изменить в /System/Library
Как это может сломать OS X и / или быть уничтоженным системным обновлением. Если вам нужно решить, постройте свой собственный Python с нуля или начните с Домашний, Макпоры, или Утечка.
РЕДАКТИРОВАТЬ:
Похоже, что текущий MacPorts
Python 2.6 Установка использует libncursesw
Таким образом, установка это может быть простейшим решением:
$ cd /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload/
$ otool -L _curses*
_curses.so:
/opt/local/lib/libncursesw.5.dylib (compatibility version 5.0.0, current version 5.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)
_curses_panel.so:
/opt/local/lib/libpanelw.5.dylib (compatibility version 5.0.0, current version 5.0.0)
/opt/local/lib/libncursesw.5.dylib (compatibility version 5.0.0, current version 5.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)