Question apt-get install vs installation du pip


Je suis un peu confus à propos des cas dans lesquels les commandes ci-dessus doivent être utilisées lors du téléchargement de paquets Python. J'essayais de télécharger un paquet nommé pyudev conformément à une réponse avec cette 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 choses suivantes ont bien fonctionné:

sudo apt-get install python-pyudev

Quand est apt-get censé être utilisé pour installer des paquets et quand est python-pip utilisé?


82
2018-03-09 15:51


origine


pip est utilisé pour installer les packages python uniquement, mais apt-get est utilisé pour installer tous les paquets. - Avinash Raj
ok..so pourquoi pas pip capable d'installer python-pyudev? - Vineet Kaushik
voir stackoverflow.com/questions/6874527/… - Avinash Raj


Réponses:


PyPI est l'index du package Python - référentiel des modules python.

pip est utilisé pour télécharger et installer des packages directement depuis 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.

Quelques différences entre l’installation de paquets Python apt-get et pip sont les suivants:

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

  • Canonical héberge uniquement une version unique de tout package (généralement la dernière version 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 toute version du package 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 les modules python 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 avoir activé le virtualenv, il est assez intelligent pour installer uniquement les modules dans notre projet virtualenv. Comme mentionné dans le point précédent, si une version d'un package python particulier est déjà installée dans un emplacement système et que l'un de nos projets nécessite une version antérieure du même package python, nous pouvons utiliser virtualenv et pip pour les installer. cette ancienne version du paquet python sans aucun conflit.

  • Comme @Radu Rădeanu souligné dans cette réponse, il y aurait également des différences dans les noms des paquets. Canonical nomme généralement les paquets Python 2 comme python-<package_name> et les paquets Python 3 python3-<package_name>. Considérant que pour pip nous avons juste besoin d'utiliser <package_name> pour Python 2 et Python3.

Lequel devriez-vous utiliser:

Tous les deux apt-get et pip sont des gestionnaires de package matures qui installent automatiquement toute autre dépendance de package lors de l'installation. Vous pouvez utiliser n'importe qui comme vous voudrez. Toutefois, si vous devez installer une version particulière de python-package ou installer le package dans virtualenv ou installer un package hébergé uniquement sur PyPI; seulement pip vous aiderait à résoudre ce problème. Sinon, si cela ne vous dérange pas d’installer les paquets à l’échelle du système, peu importe que vous utilisiez apt-getou pip.


80
2018-03-09 16:53



En outre, vous devriez essayer d'utiliser un ou l'autreet pas les deux pip et apt-get en même temps - earthmeLon
Tôt ou tard, on peut avoir besoin d’un paquet ou d’une version qui n’est pas fourni par apt-get. Parce qu'en utilisant les deux apt-get et pip peut causer des conflits, le conseil devrait être de toujours utiliser pip pour les paquets pris en charge par pip? - Abhishek Anand
@ Abhishek, ma méthode préférée est de toujours utiliser Python à travers un virtualenv .. Donc, oui, je préfère utiliser pip over apt .. - Aditya
Cela ouvre sa propre canette de vers dans certains scénarios. Disons que vous avez installé la plupart de vos paquets avec sudo pip sans pour autant virtualenv car la plupart de vos projets ont besoin du même environnement (mais plus étendu que ce qui est fourni avec une installation propre d’Ubuntu). Ensuite, lorsque vous effectuez une mise à niveau du système et que Ubuntu décide de mettre à niveau Python vers une nouvelle version (comme avec zesty à artful - Python 3.5 à 3.6), tous vos paquets installés par pip dans /usr sont laissés derrière et pip.get_installed_distributions() produit une liste vide. - o'rety


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

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

pip search pyudev

vous donnera le bon nom pour le package que vous souhaitez installer en utilisant pip install, comme

apt-cache search pyudev

vous donnera le bon nom pour le package que vous souhaitez 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, ne pas sudo pip install python-pyudev.

Cela dépend maintenant de ce que vous voulez choisir lorsque vous souhaitez installer un paquet Python: pipou apt-get. Voir par exemple ce Q & A à propos de la différence dans l'installation d'un paquet en utilisant pip et apt-get.


20
2018-03-09 16:13





Ma façon préférée est de toujours utiliser apt et seulement si le module n'est pas encore disponible dans le référentiel Debian / Ubuntu à utiliser pip, mais uniquement dans le contexte de l'utilisateur - --user drapeau. En utilisant pip de toute façon, il faut installer toutes les dépendances de construction depuis le référentiel Ubuntu ou les fournir elles-mêmes, ce qui peut être une tâche fastidieuse. apt-get installer des paquets binaires tout en pip les construit après le téléchargement. Il ne faut pas utiliser pip pour installer des modules dans des emplacements système. C'est complètement faux. Toujours utiliser --user flag pour installer un module sur le lieu de résidence. PYTHONPATH correctement configuré permet à python de récupérer d’abord les modules de HOME, puis les modules système installés avec apt-get.


1
2018-05-08 13:22