-1

我试图在我的 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 外部库在哪里以及如何检查它们。

4

2 回答 2

2

要检查其他.sosa的.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 上替换 a.so对我来说似乎充满危险——你可能会破坏某些东西并最终不得不重新安装操作系统等。为什么不安装 Python 下载python.org呢?

获取.dmg最新版本的 2.6 的源代码(除非您非常冒险,想要尝试发布候选版本 2.7;-),然后您可以安装.dmg(它将转到/usr/local而不是覆盖系统 Python;设置您的 PATH 适当地在您的 PATH 之前.bashrc或任何地方都有),然后,如果您的问题仍然存在,您可以使用任何您想要的选项从源代码重建,并在本地安装中替换特定的,而不会干扰系统目录(对我来说似乎是最谨慎的......)。/usr/local/bin/usr/bin_curses.so

于 2010-06-28T01:44:42.427 回答
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 或从HomebrewMacPortsFink开始。

编辑:

看来当前的MacPortsPython 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)
于 2010-06-28T01:39:48.533 回答