事前にpip install
を使用してインストール済みのパッケージを誤ってapt-get
した場合、どうなりますか?最新バージョン(つまり、pip
を使用してインストールしたバージョン)を使用するだけですか?その逆はどうなりますか?
注:仮想環境ではPythonを使用しません(単純にデータ分析ツールとしてPythonを使用し、ほとんどの場合、すべての最新バージョン)。
@Timoがコメントで言及したように、python -c "import sys; print sys.path"
は、PythonのインストールのPythonモジュールロードパスを提供します。 16.04の比較的新しいインストールでは、注意すべき3つのディレクトリがあります(合計10個のうち)。
ただし、最も重要なのは、「/ usr/local/lib/python2.7/dist-packages」が「/usr/lib/python2.7/dist-packages」よりも優先順位が高いことです。
Apt(-get)を介して最初にPythonパッケージをインストールする場合、 '/ usr/lib/python2.7/dist-packages'にインストールされます。後でpipを使用してモジュールをインストールしようとすると、pipは最初に依存関係がすでに満たされていることを警告してから終了します。 --upgradeフラグを追加すると、pipが強制的にインストールされ、モジュールが「/usr/local/lib/python2.7/dist-packages」にインストールされます。 (「/usr/lib/python2.7/dist-packages」のバージョンがアンインストールされていないことを示す出力に注意してください)次に、次を使用して、pipがインストールされたバージョンが使用されていることを確認できます:python -c "import MODULE; print MODULE.__file__"
。
そのため、pipを介してインストールされたパッケージはシステムにインストールされたパッケージより優先されますが、apt(-get)からインストールされたパッケージは上書きされません。
@Bryan Wyattに追加するには、PIPインストール/アップグレードされたアイテムが(おそらく古い)APTインストール済みパッケージより優先されることが望ましい(そして意図されている)ようです。私のシステムでは、aptとpipのパスが逆になっています。 (他のエントリを無視して):
しかし、私が取らなければならなかったいくつかの未知のアクションのために、これらのパスは私にとって反対の順序で現れました(他のエントリを無視します)
/usr/lib/python2.7/dist-packages
に/usr/local/lib/python2.7/dist-packages/easy-install.pth
を追加したことがわかりました。 easy-install.pth
から行を削除するだけで、順序の誤りが修正されました。 /usr/lib/python2.7/dist-packages
は、後の段階で他の場所に追加されるため、まだ私のパスにあります。
補足として、pprintはパスをより適切に表示します。
$ python -c "import sys; import pprint; pprint.pprint(sys.path)"
['',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-x86_64-linux-gnu',
'/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages/PILcompat',
'/usr/lib/python2.7/dist-packages/gtk-2.0',
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client']