web-dev-qa-db-ja.com

apt-get install python-xxx vs pip install

this 私が抱えている問題を理解しようとしていますが、Sudo apt-get install python-XXX vs pip installに関する大量の投稿を読んでおり、その意味を理解しています(apt- getは、完全に異なるグループの人々が管理するパッケージリポジトリであり、利用可能な更新がある場合は自動更新を行い、更新プログラムがある場合はバイナリなど)。ただし、いくつかの特定のことが理解できず、答えが見つかりませんでした。

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

  2. Apt-getのパッケージの多くは、pipと比べてかなり古いことに気付きました。例えば執筆時点では、ipython 2.3.0 vs 4.0.3、numpy 1.10.2 vs 1.10.4、spyder 2.3.5 vs 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。 pipをインストールする最良の方法は何ですか?現在、Sudo apt-get install python-pippip install pipSudo apt-get purge python-pipに傾いています。それは賢明ですか?私には少しばかげているようだ。

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

追伸これを新しい質問として投稿すべきか、元の問題への回答として投稿すべきかはわかりませんでした。この質問ははるかに簡潔で一般的なので、私はそれがより良い分離であると感じました。間違えた場合は申し訳ありません。

8
memo

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

  • Sudo apt-get install python-xyzの場合、パッケージwillpip listに表示されます。もちろん、Pythonでインポートできますが、pip.get_installed_distributions()にdoes n'tが表示されます。 (明らかに反対はnot trueです。つまり、pip install xyzを実行すると、apt/synapticに表示されません)

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

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

  • pipの新しいバージョン(pipにある8.0.2など)は、要件がすでに満たされていることを示す同じパッケージのインストールを拒否します。したがって、新しいバージョンをインストールすることはできません。これは良い動作です(このバージョンのpipの取得については後で説明します)。

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

  • ただし、Sudo apt-getでインストールされたパッケージでpip install -U xyzを実行しようとすると、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 vs 1.10.4、scipy 0.14.1 vs 0.17.0、ipython 2.3 vs 4.0.3、spyder 2.3.5 vs 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スパイダー

Sudo pip install -Uを使用して更新します(少なくともそれらの一部)。

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

Sudo apt-get install python-pip
Sudo pip install -U pip

追伸私は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
8
memo