web-dev-qa-db-ja.com

apt-getインストールとpipインストール

pythonパッケージをダウンロードするときに上記のコマンドを使用する必要がある場合について、少し混乱しています。この question の答えに従ってpyudevという名前のパッケージをダウンロードしようとしていました。私はこのコマンドを実行しました:

Sudo pip install python-pyudev

しかし、次のメッセージを受け取りました:

Downloading/unpacking python-pyudev

  Could not find any downloads that satisfy the requirement python-pyudev
Cleaning up...
No distributions at all found for python-pyudev
Storing complete log in /home/vineet/.pip/pip.log

しかし、以下はうまくいきました:

Sudo apt-get install python-pyudev

パッケージのインストールにapt-getが使用されるのはいつですか?python-pipはいつ使用されますか?

103
Vineet Kaushik

PyPI はPythonパッケージインデックス— pythonモジュールのリポジトリです。

pipは、PyPIから直接パッケージをダウンロードしてインストールするために使用されます。 PyPIは Python Software Foundation によってホストされています。 pythonパッケージのみを扱う専用のパッケージマネージャーです。

apt-getは、CanonicalがホストするUbuntuリポジトリからパッケージをダウンロードおよびインストールするために使用されます。

apt-getpipからpythonパッケージをインストールする場合のいくつかの違いは次のとおりです。

  • Canonicalは、選択したpythonモジュールのパッケージのみを提供します。一方、PyPIははるかに広範なpythonモジュールをホストします。そのため、apt-getを使用してインストールできないpythonモジュールがたくさんあります。

  • Canonicalは、すべてのパッケージの単一バージョン(通常は最新バージョンまたは最近リリースされたバージョン)のみをホストします。したがって、apt-getを使用して、目的のpython-packageのバージョンを決定することはできません。 pipはこの状況で私たちを助けます。以前にPyPIにアップロードされたパッケージの任意のバージョンをインストールできます。これは、依存関係が競合する場合に非常に役立ちます。

  • apt-getは、システム全体の場所にpythonモジュールをインストールします。プロジェクトにモジュールをインストールすることはできません virtualenvpipはこの問題を解決します。 virtualenvをアクティブ化した後にpipを使用している場合、プロジェクトvirtualenvにモジュールをインストールするだけで十分です。前のポイントで述べたように、特定のpythonパッケージのバージョンが既にシステム全体の場所にインストールされており、プロジェクトの1つが同じpythonパッケージの古いバージョンを必要とする場合、そのような状況では、virtualenvとpipを使用して、競合のない古いバージョンのpythonパッケージをインストールできます。

  • @ RaduRădean が指摘したように この回答では なので、一般にパッケージ名にも違いがあります。 Canonicalは通常、Python 2パッケージをpython-<package_name>と、Python 3パッケージをpython3-<package_name>と命名します。一方、pipの場合、通常はPython 2とPython3パッケージの両方に<package_name>を使用するだけです。

どちらを使用する必要があります:

apt-getpipは両方とも、インストール中に他のパッケージ依存関係を自動的にインストールする成熟したパッケージマネージャーです。誰でも好きなように使用できます。ただし、python-packageの特定のバージョンをインストールする必要がある場合、virtualenvにパッケージをインストールする場合、またはPyPIでのみホストされるパッケージをインストールする場合、この問題の解決に役立つのはpipのみです。そうでなければ、パッケージをシステム全体の場所にインストールすることを気にしないのであれば、apt-getを使用するかpipを使用するかは重要ではありません。

99
Aditya

@ -AvinashRajが コメント で述べたように、pipはpythonパッケージのみのインストールに使用されますが、apt-getは任意のプログラミング言語で作成されたパッケージのインストールに使用されます。

主な問題は、両方の場合に適切なパッケージ名を見つけることです。

pip search pyudev

pip installを使用して、インストールするパッケージに適切な名前を付けます。

apt-cache search pyudev

apt-get installを使用して、インストールするパッケージに適切な名前を付けます。

radu@Radu: ~ $ pip search pyudev
pyudev                    - A libudev binding
radu@Radu: ~ $ apt-cache search pyudev
python-pyudev - Python bindings for libudev
python3-pyudev - Python3 bindings for libudev

したがって、結論として、Sudo apt-get install python-pyudevの通信相手はSudo pip install pyudevではなくSudo pip install python-pyudevです。

pythonパッケージをインストールするときに、何を選択するかによって異なります:pipまたはapt-get。たとえば、pipapt-getを使用したパッケージのインストールの違いについて this Q&A を参照してください。

21
Radu Rădeanu

私の好ましい方法は、常にaptを使用することであり、モジュールがまだpipを使用するDebian/Ubuntuリポジトリで利用可能でない場合にのみ、ユーザーコンテキスト---userフラグでのみです。とにかくpipを使用することにより、たとえばUbuntuのリポジトリからすべてのビルド依存関係をインストールするか、それらを提供する必要があり、退屈な作業になる可能性があります。 apt-getはバイナリパッケージをインストールし、pipはダウンロード後にビルドします。 pipを使用してモジュールをシステムの場所にインストールしないでください。これは明らかに間違っています。モジュールをホームロケーションにインストールするには、常に--userフラグを使用します。適切に構成されたPYTHONPATHは、pythonで最初にHOMEからモジュールを選択し、次にapt-getでインストールされたシステムモジュールを選択します。

2
mestia