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é?
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.
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.
Comme @AvinashRaj l'a déclaré 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 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: pip
ou apt-get
. Voir, par exemple, cette Q & A à propos des différences d'installation d'un paquet utilisant pip
et apt-get
.
Ma méthode préférée est de toujours utiliser apt
et uniquement si le module n'est pas encore disponible dans le référentiel Debian/Ubuntu pour utiliser pip
name__, mais uniquement dans le contexte utilisateur - --user
. En utilisant pip
name__, 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 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 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
.