67

過去数年間、さまざまなバージョンの Python を含む多くの Python ライブラリをインストールしてきました。すぐに使えるようにするために、制御なしでやみくもにインストールしました。現在、numpy、scipy、および matplotlib を呼び出すpynestをインストールしようとすると、問題が発生しています。苦労した後、Python とライブラリをクリーンアップして再インストールします。

調査の結果、私のシステムに Python 2.5/2.6/2.7/3.2 が見つかりました。それぞれにいくつかのコピーまたはその他のものがあります: (私の OS == Mac OS X 10.7.5 Lion )

  • /Library/Frameworks/
  • /opt/local/Library/Frameworks/
  • /opt/local/bin/
  • /Applications/
  • /usr/local/bin/
  • /usr/bin/
  • /System/Library/Frameworks/

私はこれらを持っていることに夢中であることを知っています。にあるものを除いて、これらすべてを削除しました/System/Libarary/Frameworks( から何も削除しません/System/Library/)。クリーンな作業の後、次へのリンクをwhich python示します。/usr/bin/python/System/Library/Frameworks

さて、pythonを再インストールするのにクリアな環境ですか?他のバージョンが存在しないことを再確認する方法は? それらとそのライブラリがどこにでもなく、再び多くのコピーがあることを保証するには、どのようにそれらを再インストールする必要がありますか?

クリーンな Python 2.7 を適切な場所にインストールし、システムにそれがどこにあるかを正確に認識させ、他の場所にライブラリをインストールしないようにしたいと考えています。プロのように管理する方法についてアドバイスをお願いします。

参考までに、これが私の現在の$PATHです。変更する必要があると思います。

/opt/local/bin:/opt/local/sbin:/opt/nest/lib/python2.7/site-packages:/usr/local/lib/python2.7/site-packages:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/texbin:/Library/Frameworks/Python.framework/Versions/3.2/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin:/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/site-packages/django/bin:/usr/X11/bin:/opt/local/bin:/opt/local/sbin:/usr/local/lib/python2.7/site-packages:/Library/Frameworks/Python.framework/Versions/2.7/bin:/Library/Frameworks/Python.framework/Versions/3.2/bin

さらに情報が必要な場合はお知らせください。ありがとうございました!


更新

なぜこんなにおかしくなってしまうのか、深く考え直しています。次の方法でインストールしたためだと思います。

  • easy_install/ macports/ homebrew/ fink/pip時々;
  • .dmg時折;
  • .pkg時折;
  • ときどきソース コードをコンパイルします。

そして、彼らはさまざまな場所で物を作りました。これらの方法の背後にあるメカニズムは何だろうか?彼らはどのようにターゲットの場所を選択しますか? 彼らが物事を台無しにするのを防ぐ方法は?

4

5 に答える 5

37

なぜそれがめちゃくちゃになったのですか?

OPの更新が示すように、Pythonをインストールするにはいくつかの異なる方法があり、それらは異なる場所にファイルを配置します。たとえば、macportsは に物を入れますが、 は に物/opt/local/homebrew入れ/usr/local/ます。また、Mac OS X には、いくつかの Python バージョンが付属しています。そのため、さまざまな方法で python を何度もインストールすると、システム上に独立して多数の python バージョンが存在することになります。

それはどのような問題を引き起こしますか?

正確にはわかりません。問題は、Python のバージョンが多数ある場合、どのバージョンを使用し、どこでパッケージを検索するかが、システム内のパスの順序PATHPYTHONPATHそれぞれによって決定されることだと思います。そのため、Python モジュールをインストールする場所を制御できなくなる可能性があります。モジュールをインストールするために実行した場合sudo python setup.py install(ルートので python が検出されます)、モジュールPATHを実行しようとすると(今回は で python が検出されます)、何か問題が発生する可能性があります。これは私の推測です、私はそれを検証しませんでした。しかし、私の場合、何かがうまくいかなかった。importpython -c "import it"PATH

これを回避する方法は?

インストール方法やツールが異なればインストール先が異なることを認識し、慎重に使用することが原則になると思います。

  • 意図しない限り、異なる方法で同じものを 2 回インストールしないでください。(Python で実行する場合は、チェックアウトすることをお勧めしますvirtualenv)
  • PATHパスの順序に注意して、正しいかどうかを検討してください。
  • モジュールをインストールするときは、実行中の python (または pip) とモジュールがインストールされている場所を明確にしてください。

では、どうやって自分のケースを解決したのでしょうか。

すでにめちゃくちゃになっていて、治すのが非常に難しいように見えたので、最終的にOSを完全に再インストールすることでこの問題を解決し、上記のすべきこととすべきでないことに従うようになりまし. Python を使用した科学環境 (numpy/scipy/matplotlib、この質問をするように問題を示していた) のインストールについては、このチュートリアルが非常に役立つことがわかりました。それで、問題は最終的に解決しました。

于 2013-01-05T16:51:00.543 に答える
8

Python ディストリビューションを特定のフォルダーにインストールするには、--prefixPython のインストール中にスキームを使用できます。プレフィックス スキームを使用すると、たとえば Python 2.7 をフォルダーにインストールできます/opt/py27。ここで、新しくインストールされた Python ディストリビューションを使用するには、次のことを行う必要があります: PATHLD_LIBRARY_PATHをクリーンアップします。

  • すべての「古い」Python パスを削除し、
  • (私の例に従って)次のように環境変数を構成します。
    • パス: /opt/py27/bin を追加
    • LD_LIBRARY_PATH: /opt/py27/lib を追加

それでおしまい。

(複数の Python 環境を同時にインストールする必要がある場合は、virtualenvを参照することをお勧めします)

于 2013-01-02T08:13:51.997 に答える