Mac-версия Python не поддерживает UTF-8 в модуле curses? - PullRequest
0 голосов
/ 28 июня 2010

Я пытаюсь отобразить много текста в кодировке Юникод в моем приложении curses.Моя машина для разработки - 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

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


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

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

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

Хотя, хорошо знать, где находится внешняя библиотека python и какПроверь их.

Ответы [ 2 ]

2 голосов
/ 28 июня 2010

Чтобы проверить, какие другие .so sa .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), затем, если ваша проблема не устранена, вы можете восстановить from исходники с любыми опциями, которые вы хотите, и замените определенный _curses.so в локальной установке, не нарушая системный каталог вообще (мне кажется наиболее разумным ...).

1 голос
/ 28 июня 2010

Поставляемый 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)
...