pipはapt-getによってインストールされたパッケージを上書きしますか?


9

事前にpip installインストール済みのパッケージを誤って使用してしまった場合はどうなりapt-getますか?単に最新バージョン(つまり、を使用してインストールしたバージョンpip)を使用できますか?逆にどうなりますか?

注:私は仮想環境でPythonを使用していません(なぜ必要なのかわからないためです-データ分析ツールとしてPythonを使用し、ほとんどすべての最新バージョンを使用しようとします)。


私が間違っていない場合は、apt-getand を使用して同じパッケージをインストールしないでくださいpip
Lucio

Corerctは、デフォルトpip/usr/localサブディレクトリにインストールします。必要に応じて他のディレクトリにインストールします。
ティモ2014年

3
しかし、何が起こるか、例えば、私が最初にない場合apt-get install python-pandasに続いてpip install pandas、あるいは他の方法でのラウンド?グローバルPythonインストールでは、どちらのバージョンを使用するかをどのようにして知るのですか?
フレッドS

1
:@FredS:実行ターミナルで次のコマンド、Pythonはモジュールのためのその特定の順序で検索しますpython -c "import sys; print sys.path"
ティモ

回答:


3

@Timoがコメントで述べたようにpython -c "import sys; print sys.path"、PythonをインストールするためのPythonモジュールロードパスを提供します。16.04の比較的新しいインストールでは、(私の中にあった合計10個のうち)3つの注目すべきディレクトリがあります。

  • ''(アプリケーションのディレクトリ)
  • '/usr/local/lib/python2.7/dist-packages'(pipがモジュールをインストールする場所)
  • '/usr/lib/python2.7/dist-packages'(ここでaptはモジュールをインストールします)

ただし、最も重要なのは、「/ 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)からインストールされたものは上書きされません。


1

@Bryan Wyattに追加するには、PIPでインストール/アップグレードされたアイテムが(おそらく古い)APTインストールパッケージよりも優先されることが望ましい(そして意図されている)ようです。私のシステムでは、aptとpipのパスが逆になっています。(他のエントリを無視して)する必要があります:

  • '/usr/local/lib/python2.7/dist-packages'(pipがモジュールをインストールする場所)
  • '/usr/lib/python2.7/dist-packages'(ここでaptはモジュールをインストールします)

しかし、私がとったいくつかの未知のアクションが原因で、これらのパスは反対の順序で表示されました(他のエントリは無視されます)。

  • '/usr/lib/python2.7/dist-packages'(ここでaptはモジュールをインストールします)
  • '/usr/local/lib/python2.7/dist-packages'(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']
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.