PythonのMacバージョンは、CursesモジュールでUTF-8をサポートしていませんか?
質問
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モジュールをlibncurseライブラリの代わりにlibncurseswライブラリとリンクすることを提案しました。
私は自分の道をチェックして、/opt/local/libで(以下を参照)(以下を参照)を見つけました
libncurses++.a
libncurses++w.a
libncurses.5.dylib
libncurses.a
libncurses.dylib
libncursesw.5.dylib
libncursesw.a
libncursesw.dylib
Curse Moduleにリンクされているライブラリを確認するにはどうすればよいですか?他のライブラリに対してリンクするにはどうすればよいですか?私のPythonを再コンパイルせずにそれを行うことは可能ですか?
これはちょっと恥ずかしいですが、環境でUnicodeを適切に印刷する解決策を考えています。ある時点で、MacPortsからCursesライブラリをインストールし、すでに持っていることを忘れてしまったと思います。
テキストが初めて表示されなかった問題は、Pythonプログラム内でロケールを設定する必要があるためです。ロケール設定は実行中のシェルから継承されると思いましたが、2行のコードを追加しただけで問題を修正しました。
import locale
locale.setlocale(locale.LC_ALL,"")
しかし、Python外部ライブラリがどこに住んでいるのか、どのようにそれらをチェックするかを知るのは良いことです。
解決
他のものを確認します .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にインストールします - あなたは10.6にAppleのPythonを使用しているので、あなたの正確な位置である _curses.so
違うでしょう、ただそうします
$ python
>>> import _curses
>>> _curses.__file__
どこにあるかを正確に確認します _curses.so
興味のある後、電話してください otool -L
その上。
置き換えます .so
システムインストールされたPythonでは、私にとって危険が悩まされているようです - あなた たぶん......だろう 何かを破ってOSなどを再インストールする必要があります。 python.org
代わりは?
両方を取得します .dmg
そして、2.6の最新リリースのソース(あなたがとても冒険しない限り、リリース候補2.7 ;-)を試してみてください。 .dmg
(それは行きます /usr/local
, いいえ システムPythonを上書きします。あなたのパスを適切に設定します .bashrc
またはどこにいても /usr/local/bin
あなたの道の先に /usr/bin
)、問題が続いている場合、あなたはあなたが望むどんなオプションでもソースから再構築し、特定のものを置き換えることができます _curses.so
ローカルインストールでは、システムディレクトリをまったく邪魔することなく(私にとって最も賢明なようです...)。
他のヒント
OS X 10.6に出荷されたApple-Supplied 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を作成するか、 ホームブリュー, MacPorts, 、 また フィンク.
編集:
電流のようです 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)