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
はいつ使用されますか?
PyPI はPythonパッケージインデックス— pythonモジュールのリポジトリです。
pip
は、PyPIから直接パッケージをダウンロードしてインストールするために使用されます。 PyPIは Python Software Foundation によってホストされています。 pythonパッケージのみを扱う専用のパッケージマネージャーです。
apt-get
は、CanonicalがホストするUbuntuリポジトリからパッケージをダウンロードおよびインストールするために使用されます。
apt-get
とpip
からpythonパッケージをインストールする場合のいくつかの違いは次のとおりです。
Canonicalは、選択したpythonモジュールのパッケージのみを提供します。一方、PyPIははるかに広範なpythonモジュールをホストします。そのため、apt-get
を使用してインストールできないpythonモジュールがたくさんあります。
Canonicalは、すべてのパッケージの単一バージョン(通常は最新バージョンまたは最近リリースされたバージョン)のみをホストします。したがって、apt-get
を使用して、目的のpython-packageのバージョンを決定することはできません。 pip
はこの状況で私たちを助けます。以前にPyPIにアップロードされたパッケージの任意のバージョンをインストールできます。これは、依存関係が競合する場合に非常に役立ちます。
apt-get
は、システム全体の場所にpythonモジュールをインストールします。プロジェクトにモジュールをインストールすることはできません virtualenv 。 pip
はこの問題を解決します。 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-get
とpip
は両方とも、インストール中に他のパッケージ依存関係を自動的にインストールする成熟したパッケージマネージャーです。誰でも好きなように使用できます。ただし、python-packageの特定のバージョンをインストールする必要がある場合、virtualenvにパッケージをインストールする場合、またはPyPIでのみホストされるパッケージをインストールする場合、この問題の解決に役立つのはpip
のみです。そうでなければ、パッケージをシステム全体の場所にインストールすることを気にしないのであれば、apt-get
を使用するかpip
を使用するかは重要ではありません。
@ -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
。たとえば、pip
とapt-get
を使用したパッケージのインストールの違いについて this Q&A を参照してください。
私の好ましい方法は、常にapt
を使用することであり、モジュールがまだpip
を使用するDebian/Ubuntuリポジトリで利用可能でない場合にのみ、ユーザーコンテキスト---user
フラグでのみです。とにかくpip
を使用することにより、たとえばUbuntuのリポジトリからすべてのビルド依存関係をインストールするか、それらを提供する必要があり、退屈な作業になる可能性があります。 apt-get
はバイナリパッケージをインストールし、pip
はダウンロード後にビルドします。 pipを使用してモジュールをシステムの場所にインストールしないでください。これは明らかに間違っています。モジュールをホームロケーションにインストールするには、常に--user
フラグを使用します。適切に構成されたPYTHONPATHは、pythonで最初にHOMEからモジュールを選択し、次にapt-get
でインストールされたシステムモジュールを選択します。