web-dev-qa-db-fra.com

apt-get install vs pip install

Je suis un peu confus au sujet des cas dans lesquels les commandes ci-dessus doivent être utilisées lors du téléchargement de packages python. J'essayais de télécharger un paquet nommé pyudev conformément à une réponse avec ceci question . J'ai exécuté cette commande:

Sudo pip install python-pyudev

mais a reçu le message suivant:

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

Cependant, les éléments suivants ont bien fonctionné:

Sudo apt-get install python-pyudev

Quand apt-get est-il censé être utilisé pour installer des paquetages et quand est-ce que python-pip est-il utilisé?

100
Vineet Kaushik

PyPI est le Python Index du package - Référentiel de python modules.

pip est utilisé pour télécharger et installer des packages directement à partir de PyPI. PyPI est hébergé par Python Software Foundation . C'est un gestionnaire de paquets spécialisé qui ne traite que des paquets python.

apt-get est utilisé pour télécharger et installer des packages à partir de référentiels Ubuntu hébergés par Canonical.

Certaines des différences entre l’installation de python packages à partir de apt-get et de pip sont les suivantes:

  • Canonical fournit uniquement des packages pour les modules python sélectionnés. PyPI héberge une gamme beaucoup plus étendue de python modules. Donc, il y a beaucoup de python modules que vous ne pourrez pas installer avec apt-get.

  • Canonical n’héberge qu’une version unique de chaque package (généralement la dernière ou celle publiée récemment). Donc, avec apt-get nous ne pouvons pas décider de la version de python-package que nous voulons. pip nous aide dans cette situation. Nous pouvons installer n’importe quelle version du paquet qui a été précédemment téléchargée sur PyPI. Ceci est extrêmement utile en cas de conflit dans les dépendances.

  • apt-get installe python modules dans un emplacement système. Nous ne pouvons pas simplement installer des modules dans notre projet virtualenv . pip résout ce problème pour nous. Si nous utilisons pip après l'activation de virtualenv, il est suffisamment intelligent pour installer uniquement les modules dans notre projet virtualenv. Comme mentionné dans le point précédent, s'il existe une version d'un package python particulier déjà installée dans un emplacement système, et qu'un de nos projets nécessite une version antérieure du même package python Dans de telles situations, nous pouvons utiliser virtualenv et pip pour installer cette version plus ancienne du package python sans aucun conflit.

  • Comme @ Radu Rădean a souligné dans cette réponse , il y aurait généralement aussi une différence dans les noms des paquets. Canonical nomme généralement Python 2 packages en tant que python-<package_name> et Python 3 packages en tant que python3-<package_name>. Alors que, pour pip, nous n’avons généralement besoin que de <package_name> pour les deux packages Python 2, ainsi que pour les packages Python3.

Lequel devriez-vous utiliser:

apt-get et pip sont tous deux des gestionnaires de packages matures qui installent automatiquement toute autre dépendance de package lors de l'installation. Vous pouvez utiliser n'importe qui comme bon vous semble. Toutefois, si vous devez installer une version particulière de python-package, ou installer le package dans un virtualenv, ou installer un package uniquement hébergé sur PyPI. seul pip vous aiderait à résoudre ce problème. Sinon, si vous ne craignez pas d'installer les packages dans un emplacement système, le fait d'utiliser apt-get ou pip n'a pas vraiment d'importance.

97
Aditya

Comme @AvinashRaj l'a déclaré dans son commentaire , pipest utilisé pour installer les packages python uniquement, mais apt-get est utilisé pour installer les packages créés dans n'importe quel langage de programmation.

Votre problème principal est de trouver le bon nom de paquet dans les deux cas:

pip search pyudev

vous donnera le bon nom pour le paquet que vous voulez installer en utilisant pip install, comme

apt-cache search pyudev

vous donnera le bon nom pour le paquet que vous voulez installer en utilisant 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

Donc, en conclusion, le correspondant de Sudo apt-get install python-pyudev est Sudo pip install pyudev, pas Sudo pip install python-pyudev.

Maintenant, cela dépend de ce que vous voulez choisir lorsque vous souhaitez installer un package python: pipou apt-get. Voir, par exemple, cette Q & A à propos des différences d'installation d'un paquet utilisant pipet apt-get.

21
Radu Rădeanu

Ma méthode préférée est de toujours utiliser aptet uniquement si le module n'est pas encore disponible dans le référentiel Debian/Ubuntu pour utiliser pipname__, mais uniquement dans le contexte utilisateur - --user. En utilisant pipname__, il faut quand même obtenir toutes les dépendances de construction installées à partir du référentiel de Ubuntu ou les fournir elles-mêmes, ce qui peut être une tâche fastidieuse. apt-get installe les packages binaires pendant que piples construit après le téléchargement. Il ne faut pas utiliser pip pour installer des modules dans des emplacements système. C'est tout simplement faux. Utilisez toujours l'indicateur --user pour installer un module dans l'emplacement d'origine. Si PYTHONPATH est correctement configuré, laissez python choisir les modules dans HOME, puis les modules système installés avec apt-get.

2
mestia