Mac Version of Python не поддерживает UTF-8 в модуле Curses?

StackOverflow https://stackoverflow.com/questions/3129582

  •  01-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь отобразить много текста 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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top