我正在尝试在我的curses应用程序中显示大量的unicode文本。我的开发机器是MacOSx 10.6,我使用Apple附带的默认python。
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
当我在屏幕上添加unicode文本时,屏幕全部搞砸了。我试图谷歌寻求解决方案,其他人建议将_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呢?
这有点尴尬,但我想到了在我的环境中正确打印unicode的解决方案。我想在某些时候我确实从Macports安装了curses库,忘了我已经拥有它了。
第一次没有显示文本的问题是因为我需要在我的python程序中设置语言环境。我认为语言环境设置将继承我正在运行的shell,但只需添加两行代码就可以解决我的问题:
import locale
locale.setlocale(locale.LC_ALL,"")
尽管如此,知道python外部库的位置以及如何检查它们是件好事。
答案 0 :(得分: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)
这就是我在OSX 10.5上安装Python 2.6.4时所拥有的 - 因为您在10.6上使用Apple自己的Python,_curses.so
的确切位置会有所不同,只需执行
$ python
>>> import _curses
>>> _curses.__file__
查看感兴趣的_curses.so
确切位置,然后在其上调用otool -L
。
替换系统安装的Python上的.so
似乎给我带来了危险 - 你可以破坏某些东西并最终不得不重新安装操作系统等等。为什么不安装一个从python.org
下载Python?
同时获取最新版本2.6的.dmg
和来源(除非你想冒险尝试发布候选版2.7 ;-),然后你可以安装.dmg
(它将转到/usr/local
,而不是覆盖系统Python;在.bashrc
或/usr/local/bin
之前的{PATM}中/usr/bin
之前适当地设置PATH {1}}),那么,如果您的问题仍然存在,您可以使用您想要的任何选项从源重建,并替换本地安装中的特定_curses.so
,而不会干扰系统目录(似乎最谨慎的是我...)。
答案 1 :(得分:1)
随OS X 10.6一起提供的Apple提供的Python 2.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开始。
编辑:
当前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)