this 私が抱えている問題を理解しようとしていますが、Sudo apt-get install python-XXX
vs pip install
に関する大量の投稿を読んでおり、その意味を理解しています(apt- getは、完全に異なるグループの人々が管理するパッケージリポジトリであり、利用可能な更新がある場合は自動更新を行い、更新プログラムがある場合はバイナリなど)。ただし、いくつかの特定のことが理解できず、答えが見つかりませんでした。
何らかの理由で、最初にパッケージをインストールする場合、例えばnumpy、Sudo apt-get install numpy
を使用して、後でpip install numpy
を使用します。何が起こるのですか? numpyがインストールされているagain別のバージョン(.local/libなど)で他の場所にあるため、今私は2つの独立したバージョンがありますか?インポート時に使用されるのはどれですか? (私が正しく理解していればそれは分離されており、apt-getはシステム全体ですが、この質問に対する矛盾した応答を見ました、例えば here )
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
の順に利点はありますか?それともただの愚かですか?
私のピップは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-pip
、pip install pip
、Sudo apt-get purge python-pip
に傾いています。それは賢明ですか?私には少しばかげているようだ。
b。おそらくapt-getでインストールされ、その後pip 1.5.6で複数回インストールされたために、多くのパッケージが重複インストールで台無しになっていることがわかったので、重複をチェックしてクリーンアップする最良の方法は何ですか?スクリプトを使用してすべてをアンインストールして再インストールするのは安全ではないと推測していますか?
追伸これを新しい質問として投稿すべきか、元の問題への回答として投稿すべきかはわかりませんでした。この質問ははるかに簡潔で一般的なので、私はそれがより良い分離であると感じました。間違えた場合は申し訳ありません。
アーカイブについては、多くの試行錯誤の後、これが私が見つけたものです(振り返ってみると、一部のビットは理にかなっており、他のビットはかなり混乱しています)。
Sudo apt-get install python-xyz
の場合、パッケージwillはpip 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の新しいコピーを別の場所にインストールするだけです。あなたは複数のコピーになってしまい、これは大きな混乱を引き起こします。例えば:
もう一度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 pytho
n-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