0

Homebrew(素晴らしいツール)とその依存関係(gtk +を含む)を介してpygtkをインストールしました。問題は、Python インタープリターで gtk をインポートしようとすると、ImportError がスローされることです。これは、pygtk またはその他のモジュールをインタープリターにインポートするときに発生しません。何が問題なのかわかりません。:S

4

1 に答える 1

1

OPからの明確化の後、元の回答は彼の問題を説明していません...関連していると思いますが、他の人を助けるかもしれないので、そのままにします。しかし、最初に、関連する部分です。

を行う前に、チュートリアルの「はじめに」セクションに示されているように、import gtkを呼び出す必要があります。(詳細については、PyGTK FAQを参照してください。)pygtk.require

これで問題は解決するはずですが、 でクラッシュするだけですFatal Python error: PyThreadState_Get: no current thread。これを取得できる理由はいくつかありますが、この場合最も可能性が高いのは、あるバージョンの Python 用にビルドされた C 拡張機能 ( pygtk/ gtk/whatever) を別のバージョンの Python に対して実行していることです。(これは実際には PyGTK FAQにも記載されていますが、この場合は CPython C 拡張モジュールに関するより一般的な問題であり、PyGTK 固有の問題ではありません。)

複数の Python 2.7 バージョンを持っている場合 (2.7.3 を持っている場合は、Apple のバージョンは 2.7.2 であるため、間違いなく 2 つ持っている)、どのバージョンを持っているか、どのバージョンをビルドpygtkに使用したかを把握する必要があります。必ず同じものから使用してください。

そして、元の答えに戻ります。これは以下に残しました。


この問題が発生する理由は 2 つあります。


まず、OS X に付属しているもの以外に追加の Python バージョンをインストールしていない場合は、インストールするたびにbrew出力される指示や情報などを読んでいない可能性があります。pygtk

例えば:

$ brew info pygtk
pygtk: stable 2.24.0
...
==> Caveats
For non-Homebrew Python, you need to amend your PYTHONPATH like so:
  export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH

Homebrew は、Python パッケージを /usr/local/lib/pythonX.Y にインストールします — Apple の Python インストール用にインストールする場合でも。しかし、Apple の Python インストールは、デフォルトではそこでパッケージを探しません。だから、あなたはこれが言うことをする必要があります。

ターミナルでこの行を入力するだけで、そのターミナル セッションの残りの部分で機能します。それを永続的にしたい場合は…まあ、あなたが望むものに応じて、多くのオプションがあります. 詳細については、この回答を参照してください。

これについては、 Gems、Eggs、および Perl モジュールHomebrew および Pythonで詳しく説明されています。

pip(これは、Homebrewが でパッケージを探すのではなく、可能な限りを使用することを通常推奨する複数の理由の 1 つですbrew。ただし、いくつかの例外があり、pygtk がその 1 つであることは容易に想像できます。)


次に、Homebrew の Python をインストールした場合、おそらく PATH が正しく設定されていないため、Homebrew Python のサイト パッケージにパッケージをインストールし、代わりに Apple Python のインストールを実行しています。

入力pythonしているだけで、どちらを実行しているのかわからない場合は、which python教えてください。もしそうなら、それ/usr/bin/pythonはアップルのものです。の場合、それ/usr/local/bin/pythonは Homebrew のものです。

また、Mountain Lion には 2.7.2 が付属していますが、Homebrew には 2.7.3 がインストールされるため、Python スタートアップ バナーからもわかります。(また、IIRC、Apple はプレリリースの clang を使用して Python をビルドしましたが、Homebrew でビルドしたものはすべて、持っている clang/gcc/llvm-gcc でビルドされますが、これはプレリリース ビルドにはなりません…)

注: バナーのどこかに「Apple」という単語が表示されているからといって、それが Apple の Python であるとは限りません。Homebrew Python をビルドするか、python.org Python をインストールすると、ほぼ確実に Apple GCC、Apple Clang、または Apple LLVM-GCC でビルドされます。また、Apple OS でも動作します。したがって、「Apple」または「apple」は、Apple であるかどうかに関係なく、Pythonのバナーに最大 3 回表示されます。

これを修正するには、実行したい Python を実行します。例えば:

  • virtualenvいずれかまたは両方のインストールに基づいて 1 つ以上の仮想環境を作成し、venv ツールを使用して選択するために使用します。
  • 常にフル パスを使用します。たとえば、/usr/local/bin/pythonHomebrew の Python を実行するには入力し、 /usr/bin/pythonApple の Python を実行するには入力します。(そして、スクリプトのいずれかのシバン行を変更して、同じことを行います。)
  • 変数を変更して、PATH最初に必要なものが最初に来るようにします。Homebrew の場合、/usr/bin の前に /usr/local/Cellar/python/2.7.3/bin (Python のみ) または /usr/local/bin (すべての場合) のいずれかが必要です。Apple の場合は逆です。
  • Python フレームワークの bin ディレクトリを PATH に追加して、一般的なバイナリとは別に順序を操作できるようにします。(Cellar ディレクトリが同じ目的を果たしているため、これは Homebrew Python とはあまり関係ありません。しかし、他のサードパーティの Python インストールでは役立つ可能性があります。)

これはすべて、他のツールにも当てはまります。多くの人は、たとえば、あるインストールpipまたはidleパスの先頭に来るのに、別のインストールでは問題が発生するなどの問題に巻き込まれpythonます…</p>


たとえば、python.org のインストーラーを使用して別のPythonをインストールした場合、上記の問題の両方が簡単に発生する可能性があります。たとえば、python.org Python 用のものをインストールしているが、Apple Python を実行している可能性があります。その上、どちらも Homebrew の site-packages ディレクトリを参照するように構成されていない可能性があります。

于 2013-03-15T01:04:51.383 に答える