web-dev-qa-db-ja.com

システム上のバージョンが多すぎるPython

過去数年間、多くのPythonさまざまなPythonバージョンのライブラリをインストールしました。すぐに動作するように、制御なしで盲目的にインストールしました。 numpy、scipy、matplotlibを呼び出す pynest をインストールしようとすると、問題が発生します。苦労した後、Pythonとライブラリ.

調査後、システムにPython 2.5/2.6/2.7/3.2が見つかりました。各コピーには次の場所にいくつかのコピーまたはその他のものがあります。(my 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

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


[〜#〜] update [〜#〜]

私はなぜそれがそんなにクレイジーになるのかを改めて考え直しています。次の方法でインストールしたためだと思います。

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

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

54
Skyler

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

OPのアップデートで述べられているように、Pythonをインストールする方法はいくつかあり、ファイルを異なる場所に配置します。たとえば、macportsは物事を/opt/local/に入れ、homebrewは物事を/usr/local/に入れます。また、Mac OS Xにはいくつかのpythonバージョンがあります。したがって、pythonをさまざまな方法で何度もインストールすると、多くのpythonシステム上に独立して存在するバージョンを取得します。

どのような問題が発生しますか?

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

これを避ける方法は?

原則として、異なる方法とツールが異なる場所に個別に物事をインストールすることを認識しているので、それらを注意して使用することです

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

では、どのように自分のケースを解決しましたか?

すでに混乱していて、治すのが非常に難しいと思われたので、最後にOSの完全な再インストールでこの質問を解決し、開始しました上記のDOs-and-DONTsに従うこと。 python(numpy/scipy/matplotlib、この質問をするのに問題を示していた)を使用した科学環境のインストールでは、 このチュートリアル は非常にだから、問題は最終的に解決しました。

27
Skyler

ここに、私を混乱させたものと、それを解決した方法があります。

$ which python
/usr/bin/python 

$ which python3
/usr/local/bin/python3

$ ls /usr/local/bin/python
ls: /usr/local/bin/python: No such file or directory

したがって、python2.7のHomeBrewインストールはありませんが、python3のインストールはあります。/usr/bin/pythonの下のバージョンはシステムのデフォルトを使用しています。モジュールの検索パスに基づいて判断できます。

$ /usr/bin/python
Python 2.7.10 (default, Feb  7 2017, 00:08:15) 
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
`enter code here`Type "help", "copyright", "credits" or "license" for 
more information.
>>> import sys
>>> sys.path
['', '/Library/Python/2.7/...

'/ Library/Python'に注目してください。これはMac OSのpythonバージョンです。しかし、ユーザーがインストールしたバージョン(つまりHomeBrew)に厳密にとどまりたいです。

そこで、これを修正するために私がしたことは次のとおりです。

$ brew install python
...
Warning: python 2.7.13 is already installed, it's just not linked.
You can use `brew link python` to link this version.

$ brew link --overwrite python

$ which python
/usr/local/bin/python

$ python
Python 2.7.10 (default, Feb  7 2017, 00:08:15) 
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/local/Cellar/python/2.7.13...

/ Library/..ではなく/ usr/localです。

これで、すべてのpipインストール済みモジュールが見つかりました!問題が解決しました!


更新:

Brewをバージョン1.5.4に更新した後、シンボリックリンクが削除されたようです。そして、これをパスに追加する必要があります。

export PATH="/usr/local/opt/python/libexec/bin:$PATH"

「brew info python」の「警告」セクションを参照してください。

==> Caveats
This formula installs a python2 executable to /usr/local/bin.
If you wish to have this formula's python executable in your PATH then add
the following to ~/.bash_profile:
  export PATH="/usr/local/opt/python/libexec/bin:$PATH"

Pip and setuptools have been installed. To update them
  pip2 install --upgrade pip setuptools

You can install Python packages with
  pip2 install <package>

They will install into the site-package directory
  /usr/local/lib/python2.7/site-packages

See: https://docs.brew.sh/Homebrew-and-Python.html
12
jersey bean

pythonディストリビューションを特定のフォルダーにインストールするには、pythonのインストール中に--prefixスキームを使用できます。 プレフィックススキーム を使用すると、たとえばPython 2.7をフォルダー/opt/py27にインストールできます。ここで、新しくインストールされたPythonディストリビューションを使用するには、次の手順を実行する必要があります。cleanupyou[〜 #〜] path [〜#〜]およびLD_LIBRARY_PATH

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

それでおしまい。

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

8
gecco

別のpythonバージョンを管理する別の優れたソリューションを次に示します。

https://github.com/pyenv/pyenv

(私はすでにここに答えを提供しましたが、これを追加または代替の答えとして投稿することにしました)

1
jersey bean