2010-06-28 1 views
0

Я пытаюсь показать много текста Юникода в моем приложении curses. Моя машина разработки MacOSx 10.6, и я использую питон по умолчанию, поставляемый с Apple.Mac версия Python не поддерживает UTF-8 в модуле curses?

Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin 

Когда я добавил текст Юникода к экрану, экран все испортился. Я попытался найти решение Google, и другие люди предложили связать модуль _curses с библиотекой libncursesw вместо библиотеки libncurse.

Я проверил мой путь, и я нашел (см ниже) в/Opt/местные/Библиотека

libncurses++.a 
libncurses++w.a 
libncurses.5.dylib 
libncurses.a 
libncurses.dylib 
libncursesw.5.dylib 
libncursesw.a 
libncursesw.dylib 

Как проверить, какая библиотека моя ругань модуль связан, и как я могу связать с другой библиотеке? Можно ли это сделать без перекомпиляции моего Python?

Это немного смущает, но я считаю, что решение правильно печатать Юникод в моей среде. Я думаю, что в какой-то момент я установил библиотеки curses из Macports и забыл, что у меня это уже есть.

Проблема в том, что текст не отображался в первый раз, потому что мне нужно установить языковой стандарт в моей программе python. Я думал, что региональные настройки будут наследоваться от оболочки я бегу, а просто добавил две строки кода фиксированная моя проблема:

import locale 
locale.setlocale(locale.LC_ALL,"") 

Хотя, это хорошо, чтобы знать, где питон внешние библиотеки жизни и как проверить их ,

+0

Я попытался связать libcurses.dylib в/usr/lib с тем, который я нашел в/opt/local/lib, но результат был таким же ... Так что пока не удалась ~ – Patrick

+0

Удивительно, но после того, как я добавил магия двух строк, как python (версия Apple), так и python2.6 (версия Macport) отображают unicode правильно. – Patrick

ответ

2

Чтобы проверить, какие другие .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 на Это.

Замена .so на системной установленной Python кажется таит в себе опасность для меня - вы могли сломать что-то и в конечном итоге переустановки ОС и т.д.Почему бы не установить загрузку Python с python.org?

Получить как .dmg и источники для последнего выпуска 2.6 (если вы не настолько предприимчивы вы хотите попробовать релиз-кандидат 2.7 ;-), то вы можете установить .dmg (он будет идти к /usr/local, не перезапись системы Python, установите свой PATH соответствующим образом в своем .bashrc или где бы вы ни находились /usr/local/bin в своем PATH до /usr/bin), тогда, если ваша проблема не исчезнет, ​​вы можете перестроить из источников с любыми параметрами, которые вы хотите, и заменить конкретные _curses.so в локальной установке, не нарушая системный каталог вообще (кажется мне самым разумным ...).

+0

Установщик python.org обычно связан с собственной копией libncurses, а не libncuresw, к сожалению. –

+0

@Ned, да, вот почему восстановление (по крайней мере, '_curses.so', но мне, вероятно, будет легче собрать все, а затем переместить только этот модуль). –

1

В 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 с нуля или начните с Homebrew, MacPorts или Fink.

EDIT:

Оказывается, что текущий 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) 
Смежные вопросы