-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 テキストを追加すると、画面がめちゃくちゃになりました。解決策を Google で調べてみましたが、_curses モジュールを libncurse ライブラリではなく libncursesw ライブラリにリンクすることを他の人が提案しています。

パスを確認したところ、 /opt/local/lib で見つかりました(以下を参照)

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

curses モジュールがリンクされているライブラリを確認するにはどうすればよいですか? また、他のライブラリにリンクするにはどうすればよいですか? 私のPythonを再コンパイルせずにそれを行うことは可能ですか?


これはちょっと恥ずかしいですが、私の環境でユニコードを適切に印刷するための解決策を見つけました。ある時点で、Macports から curses ライブラリをインストールしたのに、すでに持っていることを忘れていたと思います。

初めてテキストが表示されなかった問題は、Python プログラム内でロケールを設定する必要があるためです。ロケール設定は実行中のシェルから継承されると思っていましたが、2 行のコードを追加するだけで問題が解決しました。

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

ただし、python 外部ライブラリが存在する場所とそれらを確認する方法を知っておくとよいでしょう。

4

2 に答える 2

2

.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)

これは、OSX10.5にインストールしたPython2.6.4にあるものです。10.6でApple独自のPythonを使用しているため、正確な場所は_curses.so異なります。

$ python
>>> import _curses
>>> _curses.__file__

関心のある場所を正確に確認してから_curses.so、それを呼び出しますotool -L

システムにインストールされたPythonを置き換えると、.so私には危険が伴うようです。何か壊れて、OSなどを再インストールしなければならなくなる可能性がありますpython.org。代わりにPythonダウンロードをインストールしてみませんか?

.dmg2.6の最新リリースのとソースの両方を入手し(リリース候補2.7を試してみたいほど冒険的でない限り;-)、インストールできます.dmg(システムPythonを上書きするの/usr/localはなく、に移動します;設定します。 PATHを適切に、.bashrcまたは/usr/local/binPATHの前にある場所に配置すると、問題が解決しない場合は、システムディレクトリにまったく/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/LibraryOS X を破壊したり、システム アップデートによって消去されたりする可能性があるため、何かを変更しようとするのは非常に悪い考えです。再リンクが必要な場合は、独自の Python をゼ​​ロから構築するか、HomebrewMacPorts、またはFinkから始めてください。

編集:

現在の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 に答える