apt-get install python-xxx vs pip install


8

私はまだ私が抱えているこの問題を理解しようとしていますが、sudo apt-get install python-XXXvs に関するpip install大量の投稿を読んでおり、その要点を理解しています(apt-getはパッケージリポジトリであり、pipする完全に異なる人々のグループによって管理されています-利用可能なアップデートがある場合、他のものすべてと一緒にアップデートします。バイナリなどです)。しかし、私が理解できず、答えを見つけることができなかったいくつかの特定のことがあります。

  1. なんらかの理由で、最初にnumpyなどのパッケージをでインストールしsudo apt-get install numpy、次にpip install numpy。何が起こるのですか?numpyは別のバージョン(.local / libなど)の別の場所に再度インストールされているので、2つの独立したバージョンがありますか?インポート時にどちらが使用されますか?(私が正しく理解していれば、それは別個であり、apt-getはシステム全体に適用されますが、この質問に対する矛盾する応答をここで見ました(例:ここ

  2. apt-getのパッケージの多くは、pipに比べてかなり古いことに気付きました。例:ipython 2.3.0対4.0.3、numpy 1.10.2対1.10.4、spyder 2.3.5対2.3.8。最初にsudo apt-get install続いてpip install?それともばかですか?

  3. 私のピップは1.5.6であることに気づきました-もしそうなら、それは最新のものですsudo apt-get install python-pip。一方、pipでは8.0.2です。古いバージョンでは同じパッケージを何度もインストールでき、警告も表示されないため、これが問題を引き起こしていると思います。そして、どういうわけかそれは古いものを上書きしません。同じパッケージ(たとえば、numpy)をアンインストールし続けることができ、実行しても常にそこにあるため、これに気付きましたpip show numpy。そして奇妙なことに、常に同じフォルダー(.local /)を表示していますが、バージョンが異なります:Sしたがって、これに関連して2つの質問があります。

    a。ピップをインストールする最良の方法は何ですか?私は現在に傾いていますsudo apt-get install python-pippip install pipsudo apt-get purge python-pip。それは賢明ですか?それは私には少しばかげているようです。

    b。多くのパッケージが重複インストールで混乱していることがわかったので、おそらくいくつかはapt-getでインストールされ、その後、pip 1.5.6で複数回インストールされたため、重複をチェックしてクリーンアップする最良の方法は何ですか?スクリプトを使用してすべてをアンインストールして再インストールするのは安全ではないと思いますか?

PS私はこれを新しい質問として投稿するべきか、元の問題に対する応答として投稿するべきかわかりませんでした。この質問の方がはるかに簡潔で一般的であるため、別のほうがよいと感じました。間違えた場合はお詫びします。



私は実際に私の質問でその投稿を参照しています。それは私の混乱の多くを解消するのに非常に役立ちましたが、上記の私の質問には答えません(少なくとも私はそれを見ることができませんでした)
メモ

ああ、あなたの他の質問では。リンクされた投稿のリストを見ただけで、そこには表示されませんでした。
ムル

回答:


8

アーカイブについては、多くの試行錯誤の後、これが私が見つけたものです(振り返ってみると、いくつかのビットは意味があり、他はかなり混乱しています)。

  • の場合sudo apt-get install python-xyz、パッケージはに表示されpip listます。もちろん、Pythonでインポートできますが、pip.get_installed_distributions()に表示されません。(明らかに逆は真ではありません。つまり、そうした場合pip install xyz、apt / synapticには表示されません)

  • その後sudo apt-get install python-xyzpip install xyz何が起こるかはあなたが持っているpipのバージョンに依存します。

OLD v1.5.6(Ubuntu PPAで出荷されている現在のバージョン):

  • このバージョンのpip(1.5.6)は、xyzの新しいコピーを別の場所にインストールするだけです。あなたは複数のコピーで終わり、これは巨大な混乱を引き起こします。例えば:

    • apt-getのnumpyは、/ usr / local / lib / python2.7 / dist-packagesで1.8.2です。
    • 〜/ .local / lib / python2.7 / site-packagesのpipからのnumpyは1.10.4です
  • pip install numpyもう一度実行すると、ダウンロードして再インストールします。したがって、実際にはアクセスできない多くの異なるバージョンになる可能性があります。私はpip install numpy5倍の回数を実行でき、それからpip uninstall numpy 5x回数を実行できます!明らかにそれを行わないように注意を払うことができますが、他のソフトウェアのインストールスクリプトは少し不注意で、混乱することがあります。Ubuntuが正式にこのバージョンのpipを出荷しているとは信じられません。

新しいv8.0.2(pip自体の現在のバージョン):

  • 新しいバージョンのpip(たとえば、pip上の8.0.2)は、要件がすでに満たされていると言って、同じパッケージのインストールを拒否します。したがって、新しいバージョンをインストールすることはできません。これは良い動作です(後でこのバージョンのpipを取得する方法の詳細)。

  • この場合、アップグレードのみが可能です。つまり、-Uフラグを指定してインストールします。

  • ただし、pip install -U xyzsudo apt-getを使用してインストールされたパッケージを使用しようとすると、apt-getが/ usr /にインストールされており、そこに書き込むにはrootアクセス権が必要なため、権限エラーが発生します。

  • だから私の知る限り、あなたはsudo pip install -U xyzそれを更新できるようにするしかありません。この場合、pipは最新のパッケージをsudo apt-getが書き込んだ場所と同じ場所にインストールします。たとえば、私の場合は/usr/local/lib/python2.7/dist-packagesです。これはいい。

  • aptのパッケージは、pipのパッケージよりもかなり古いことが多いことも指摘する必要があります(たとえば、numpy v1.8.2対1.10.4、scipy 0.14.1対0.17.0、ipython 2.3対4.0.3、spyder 2.3.5対2.3.8)

だから私の現在の考えはsudo apt-get、例えば sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose spyderで大きなものを手に入れることです

次に、それらを(または少なくとも一部を)で更新しますsudo pip install -U

注意:ピップから新しいピップを取得することは非常に重要です(非常にメタ)

sudo apt-get install python-pip
sudo pip install -U pip

PS私はvirtualenvを知っていますが、今は必要ありません。必要な開発環境は1つだけです。

そして、これがパッケージ、バージョン、パスのリストをダンプするための小さなスクリプトです(ただし、apt-getからのものではなく、pipでインストールされたモジュールでのみ機能します)。

import pip
pp = pip.get_installed_distributions()
for p in sorted([p.location+"\t"+p.project_name+" ("+p.version+")" for p in pp]):
    print p
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.