apt-get install vs install pip

80

Je suis un peu perplexe quant aux 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 apt-get est-il censé être utilisé pour installer les packages et quand python-pip est-il utilisé?

    
posée Vineet Kaushik 09.03.2014 - 16:51
la source

3 réponses

78

PyPI est l’index Python Package - référentiel des modules Python.

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 des packages python à partir de apt-get et pip sont les suivantes:

  • Canonical ne fournit que des paquets 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 avec apt-get .

  • Canonical héberge uniquement une version unique d'un paquet (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 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é virtualenv, il est suffisamment 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 package python sans aucun conflit.

  • Comme @Radu Rădeanu a souligné dans cette réponse , il y aurait également des différences de noms de paquets. Canonical nomme généralement les packages Python 2 en tant que packages python-<package_name> et Python 3 en tant que python3-<package_name> . Alors que pour pip , nous avons généralement besoin d'utiliser <package_name> à la fois pour Python 2 et pour Python3.

Lequel devriez-vous utiliser:

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; seul pip vous aiderait à résoudre ce problème. Sinon, si vous ne voulez pas installer les packages dans un emplacement système, peu importe que vous utilisiez apt-get ou pip .

    
réponse donnée Aditya 09.03.2014 - 17:53
la source
20

Comme le dit @AvinashRaj dans son commentaire , pip est 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 principal problème est de trouver le bon nom de package dans les deux cas:

pip search pyudev

vous donnera le nom correct pour le package que vous souhaitez installer en utilisant pip install , en tant que

apt-cache search pyudev

vous donnera le bon nom pour le paquet que vous voulez installer en utilisant apt-get install :

[email protected]: ~ $ pip search pyudev
pyudev                    - A libudev binding
[email protected]: ~ $ apt-cache search pyudev
python-pyudev - Python bindings for libudev
python3-pyudev - Python3 bindings for libudev

Par conséquent, le correspondant de sudo apt-get install python-pyudev est sudo pip install pyudev , pas sudo pip install python-pyudev .

Cela dépend maintenant de ce que vous voulez choisir lorsque vous souhaitez installer un package python: pip ou apt-get . Voir, par exemple, cette Q & A à propos de différence dans l'installation d'un package utilisant pip et apt-get .

    
réponse donnée Radu Rădeanu 09.03.2014 - 17:13
la source
1

Ma méthode 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 pour utiliser pip , mais uniquement dans le contexte utilisateur - Indicateur --user . En utilisant pip one, il faut de toute façon installer toutes les dépendances de construction installées depuis le dépôt Ubuntu ou les fournir elles-mêmes, ce qui peut être une tâche fastidieuse. apt-get installe les paquets binaires tandis que pip les construit après le téléchargement. Il ne faut pas utiliser pip pour installer des modules dans des emplacements de système. C'est complètement faux. Toujours utiliser l'indicateur --user pour installer un module à l'emplacement d'origine. 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 .

    
réponse donnée mestia 08.05.2018 - 15:22
la source

Lire d'autres questions sur les étiquettes