Quel est le meilleur moyen d'installer des paquets Python?

41

Quel est le meilleur moyen d'installer des paquets Python dans Ubuntu 11? Je suis un récent converti à Ubuntu et veux apprendre les meilleures pratiques.

Pour le contexte, je cherche à installer le paquet tweeststream, mais je ne l’ai pas vu dans mon gestionnaire de paquets Synaptic. De plus, je suis très novice en programmation, mais je peux généralement suivre les exemples de code.

Btibert3
la source

Réponses:

30

Je pense que le meilleur moyen pour vous serait d'installer un système de packaging Python comme "python-pip". Vous pouvez l'installer avec Synaptic ou le Centre logiciel Ubuntu.

Pip vous permettra d’installer et de désinstaller facilement les paquets Python, tout simplement pip install package. Dans votre cas, ce serait quelque chose comme ça depuis le terminal:

sudo pip install tweeststream
Zetah
la source
3
C'est bon pour les paquets simples, mais pas si bon pour les paquets plus gros, par exemple numpy
hayd
@ hayd: pourquoi? Est-ce lié à askubuntu.com/questions/595366/…
naught101
2
@ naught101 Je pense que je voulais probablement dire scipy, je ne sais pas si c'est lié ... on dirait que pip est trop tard dans le chemin de python. Je recommande fortement d'utiliser anaconda / conda, il est nettement supérieur à pip IMO.
hayd
2
IMHO utiliser sudo pip <anything>devrait être utilisé très soigneusement. Etant donné qu’il tweetstreamne se trouve pas dans le Centre logiciel Ubuntu , je recommande l’utilisation d’un virtualenv . tweetstreamsetup.py nécessite anyjsonce qui est un paquet Ubuntu . Ne pas installer tweetstream dans virtualenvcertaines applications Ubuntu dépendantes anyjsonpeut échouer. Dépanner dur.
Mark Mikofski
9
Pour répéter: ne pas utiliser sudo pipsur Ubuntu. @MarkMikofski: vous n'avez pas besoin de virtualenv (sauf si vous le souhaitez pour une raison particulière). python -mpip install --user package-namepouvez installer le package packafe-namepour l'utilisateur actuel. S'il existe des dépendances complexes (grandes extensions C); vous pouvez les installer en utilisant apt-get, pour éviter d'installer des dépendances de construction sauf si cela est nécessaire.
Jfs
37

updated: 2019-05-11: Cet article mentionne principalement virtualenv, mais selon la documentation de Python sur l'installation de module , puisque Python 3.5 "l'utilisation de venvest désormais recommandée pour la création d'environnements virtuels", alors qu'il virtualenvs'agit d'une alternative pour les versions de Python antérieures à 3.4 .

Mise à jour: 17/08/2018: depuis Conda-4.4.0 utilisation condaà activateAnaconda sur toutes les plateformes

mis à jour: 2017-03-27: PEP 513 - manylinuxfichiers binaires pour PyPI

Mis à jour le: 19-08-2016: Option Anaconda Continuum

C'est un peu une copie de easy_install / pip ou d'apt-get .

Pour les packages Python globaux , utilisez le Centre de logiciel Ubuntu, apt, apt-get ou synaptic.

Ubuntu utilise Python pour de nombreuses fonctions importantes. Par conséquent, une interférence avec Python peut corrompre votre système d'exploitation. C'est la principale raison pour laquelle je ne l' utilise pipsur mon système Ubuntu, mais je l' utilise soit Ubuntu Software Center, synaptique , apt-getou le plus récent justeapt , tous par défaut installer des paquets à partir du référentiel Ubuntu . Ces paquets sont testés, généralement pré-compilés pour une installation plus rapide et finalement conçus pour Ubuntu. De plus, toutes les dépendances requises sont également installées et un journal des installations est maintenu afin de pouvoir être annulé. Je pense que la plupart des paquets ont des pensions du Launchpad correspondantes, ce qui vous permet de classer les problèmes.

Une autre raison d'utiliser l'un ou l'autre des paquets Ubuntu est que parfois, ces paquets Python ont des noms différents selon l'endroit où vous les avez téléchargés. Python-chardet est un exemple de paquet qui s'appelait autrefois dans PyPI et dans le référentiel Ubuntu. Par conséquent, vous pip install requestsne réaliserez pas que chardet est déjà installé sur votre système car la version d’Ubuntu porte un nom différent. Par conséquent, installez une nouvelle version qui corrompra votre système d’une manière mineure mais insignifiante, mais pourquoi feriez-vous cela.

En général, vous souhaitez uniquement installer du code de confiance dans votre système d'exploitation. Donc, vous devriez être nerveux à propos de la frappe $ sudo pip <anything-could-be-very-bad>.

Enfin, certaines choses sont simplement plus faciles à installer avec les paquets Ubuntu. Par exemple si vous essayezpip install numpy d’installer numpy & scipy sauf si vous avez déjà installé gfortran, atlas-dev, blas-dev et lapack-dev, vous verrez un flot infini d’erreurs de compilation. Cependant, installer numpy & scipy via le référentiel Ubuntu est aussi simple que ...

$ sudo apt-get install python-numpy python-scipy

Vous avez de la chance, car vous utilisez Ubuntu, l’une des distributions les plus largement prises en charge et les plus mises à jour. Il est fort probable que tous les packages Python dont vous aurez besoin se trouvent dans le référentiel Ubuntu et sont probablement déjà installés sur votre ordinateur. Et tous les 6 mois, un nouveau cycle de paquets sera publié avec la dernière distribution d'Ubuntu.

Si vous êtes sûr à 100% que le paquet n’interférera en aucune manière avec votre système Ubuntu, vous pouvez l’installer à l’aide de pip et Ubuntu aura la gentillesse de garder ces paquets séparés des paquets de distribution en plaçant les paquets de distribution dans un dossier appelé dist-packages/ . Le référentiel Ubuntu a à la fois pip, virtualenv et setuptools. Cependant, je souscris à la suggestion de Wojciech d’utiliser virtualenv.

Pour les projets personnels Python, utilisez pip and wheel dans un environnement virtuel

Si vous avez besoin de la dernière version ou si le module ne se trouve pas dans le référentiel Ubuntu, démarrez virtualenv et utilisez pip pour installer le paquet. Bien que pip et setuptools aient fusionné, le pip IMO est préférable à easy-install ou distutils, car il attend toujours que le paquet soit complètement téléchargé et construit avant de le copier dans votre système de fichiers, ce qui facilite la mise à niveau ou la désinstallation. À bien des égards, il ressemble à apt-get, en ce sens qu'il gère généralement bien les dépendances. Cependant, vous devrez peut- être gérer certaines dépendances vous-même, mais depuis l' adoption de PEP 513, il existe désormais des manylinuxfichiers binaires dans Python Package Index (PyPI) pour les distributions Linux populaires telles que Ubuntu et Fedora .Par exemple, comme mentionné ci-dessus pour NumPy et SciPy, assurez-vous que vous avez installé gfortran, atlas-dev, blas-dev et lapack-dev à partir du référentiel Ubuntu. Par exemple, NumPy et SciPy sont maintenant distribués pour Ubuntu sous forme de manylinuxroulettes utilisant par défaut OpenBLAS. d'ATLAS. Vous pouvez toujours les construire à partir des sources en utilisant les options pip --no-use-wheelou--no-binary <format control> .

~$ sudo apt-get install gfortran libblas-dev liblapack-dev libatlas-dev python-virtualenv
~$ mkdir ~/.venvs
~$ virtualenv ~/.venvs/my_py_proj
~$ source ~/.venvs/my_py_proj/bin/activate
~(my_py_proj)$ pip install --no-use-wheel numpy scipy

Reportez-vous à la section suivante, "Vous n’êtes pas sudoers", ci-dessous pour installer les versions mises à jour de pip, setuptools, virtualenv ou wheel sur votre profil personnel à l’aide du --userschéma d’installation avec pip. Vous pouvez l’utiliser pour mettre à jour pip pour votre usage personnel, comme l’a indiqué JF Sebastian dans son commentaire pour une autre réponse . REMARQUE: l' -mest vraiment nécessaire que sur MS Windows lors de la mise à jour pip .

python -m pip install --user pip setuptools wheel virtualenv

Les nouvelles versions de pip mettent automatiquement en cache les roues, ce qui suit n’est utile que pour les anciennes versions de pip. Étant donné que vous risquez de devoir installer plusieurs fois, envisagez d'utiliser une roue avec pip pour créer une timonerie. Wheel est déjà inclus dans la virtualenvv13.0.0. Par conséquent, si votre version de virtualenvest trop ancienne, vous devrez peut-être installer Wheel en premier.

~(my_py_proj)$ pip install wheel  # only for virtualenv < v13.0.0
~(my_py_proj)$ pip wheel --no-use-wheel numpy scipy

Cela créera des fichiers de roue binaire <cwd>/wheelhouse, à utiliser -dpour spécifier un répertoire différent. Maintenant, si vous démarrez un autre virtualenv et que vous avez besoin des mêmes packages que ceux que vous avez déjà construits, vous pouvez les installer à partir de votre timonerie à l’aide depip install --find-links=<fullpath>/wheelhouse

Lisez la section Installation de modules Python dans la documentation Python et Installation de packages sur la page principale de Python Package Index . Aussi pip , venv , virtualenv et wheel .

Si vous n'êtes pas dans sudoerset virtualenvn'est pas installé.

Une autre option consiste à utiliser un environnement virtuel ou, si vous utilisez un partage Linux sans privilèges root, à l'aide du schéma d'installation --userou du --home=<wherever-you-want>schéma d'installation Python avec Python distutilsinstallera les packages à la valeur site.USERBASEou à l'endroit souhaité. Les nouvelles versions de pip ont également une --useroption. Ne pas utiliser sudo!

pip install --user virtualenv

Si votre version Linux de pip est trop ancienne, vous pouvez alors transmettre les options de configuration, --install-optionce qui est utile pour transmettre des options personnalisées à certains setup.pyscripts de certains packages générant des extensions, telles que la définition du fichier PREFIX. Vous devrez peut-être simplement extraire la distribution et l'utiliser distutilspour installer le paquet à l'ancienne, en le saisissant python setup install [options]. La lecture d'une partie de la documentation d'installation et de la distutilsdocumentation peut aider.

Python est assez gentil pour ajouter site.USERBASEde l’ PYTHONPATHavance à toute autre chose, alors les changements ne vous affecteront que. Un endroit populaire pour --homeest ~/.local. Consultez le guide d'installation du module Python pour connaître la structure de fichier exacte et plus précisément l'emplacement de vos packages de site. Remarque : si vous utilisez le --homesystème d'installation, vous devrez peut - être ajouter à la PYTHONPATHvariable d'environnement à l' aide exportde votre .bashrc, .bash_profileou dans votre shell pour vos paquets localisés à être disponibles en Python.

Utilisez Continuum Anaconda Python pour des projets mathématiques, scientifiques, de données ou personnels

Si vous utilisez Python pour les mathématiques, les sciences ou les données, alors IMO est une très bonne option: la distribution Anaconda-Python ou la distribution plus élémentaire miniconda distribuée par Anaconda, Inc. (anciennement appelée Continuum Analytics ) . Bien que quiconque puisse tirer parti d’Anaconda pour des projets personnels, l’installation par défaut comprend plus de 500 logiciels de mathématiques et de sciences tels que NumPy, SciPy, Pandas et Matplotlib , tandis que miniconda n’installe que Anaconda-Python et le gestionnaire de l’environnement. Anaconda n’installe que dans votre profil personnel, c’est -à- dire:/home/<user>/ et vous permet de modifier ou d’ajouter le chemin d’ Anaconda à votre profil personnel dans votre dossier personnel~/.bashrc~/.bash_profile$PATH recommandations matière d'approvisionnement.conda.shdans votre ~/.bashrcqui vous permet conda activate <env|default is base>de démarrer anaconda - cela ne vous concerne que - votre chemin système reste inchangé . Par conséquent, vous n'avez pas besoin d'accéder à la racine ou sudod'utiliser Anaconda! Si vous avez déjà ajouté Anaconda-Python, miniconda ou conda à votre chemin personnel, supprimez l' PATHexportation de votre ~/.bashrcet mettez à jour la nouvelle recommandation afin que votre système Python soit à nouveau en premier.

Ceci est un peu similaire à l' --useroption que j'ai expliquée dans la dernière section, sauf qu'elle s'applique à Python dans son ensemble et pas seulement aux packages. Par conséquent, Anaconda est complètement séparé de votre système Python , il n’interférera pas avec votre système Python et vous seul pouvez l’utiliser ou le modifier. Comme il installe une nouvelle version de Python et de toutes ses bibliothèques, vous aurez besoin d'au moins 200 Mo d'espace disque, mais il est très astucieux de mettre en cache et de gérer les bibliothèques, ce qui est important pour certaines choses intéressantes que vous pouvez faire avec Anaconda.

Anaconda gère une collection de fichiers binaires et de bibliothèques Python requis par les dépendances dans un référentiel en ligne (anciennement appelé binstar ) , et héberge également les packages utilisateur en tant que "canaux" différents. Le gestionnaire de packages utilisé par Anaconda, condainstalle par défaut les packages à partir d'Anaconda, mais vous pouvez signaler un "canal" différent à l'aide de l' -coption.

Installez les paquets avec condajuste comme pip:

$ conda install -c pvlib pvlib  # install pvlib pkg from pvlib channel

Mais condapeut faire beaucoup plus! Il peut également créer et gérer des environnements virtuels, tout comme virtualenv. Par conséquent, puisque Anaconda crée des environnements virtuels, le pipgestionnaire de paquets peut être utilisé pour installer des paquets à partir de PyPI dans un environnement Anaconda sans root ou sudo. Ne pas utiliser sudoavec Anaconda! Attention! Soyez prudent lorsque vous mixez pipet condadans un environnement Anaconda, car vous devrez gérer les dépendances des paquets avec plus de soin. Une autre option pipdans un environnement conda consiste à utiliser le canal conda-forge, mais il est également préférable de le faire dans un environnement de conda frais avec conda-forge comme canal par défaut. En dernier recours, si vous ne trouvez aucun paquet ailleurs que sur PyPI, envisagez d’utiliser --no-depspuis d’installer manuellement les dépendances restantes conda.

Anaconda est également similaire à certains égards à Ruby RVM si vous connaissez cet outil. Anaconda condavous permet également de créer des environnements virtuels avec différentes versions de Python . Par exemple : conda create -n py35sci python==3.5.2 numpy scipy matplotlib pandas statsmodels seaborncréera une pile scientifique / de données avec Python-3.5 dans un nouvel environnement appelé py35sci. Vous pouvez changer d’environnement en utilisant conda. Depuis Conda-4.4.0, cela est maintenant différent de virtualenvqui utilise source venv/bin/activate, mais avant Conda-4.4.0 les condacommandes étaient les mêmes que virtualenvet également utilisé source:

# AFTER conda-4.4 
~/Projects/myproj $ conda activate py35sci

# BEFORE conda-4.4 
~/Projects/myproj $ source activate py35sci

Mais attendez il y a plus! Anaconda peut également installer différentes langues telles que R pour la programmation statistique à partir du canal Anacondar . Vous pouvez même configurer votre propre canal pour télécharger des distributions de paquetages conçues pour conda . Comme mentionné précédemment, conda-forge gère des versions automatisées de nombreux packages sur PyPI sur le canal conda-forge Anaconda .

Épilogue

Il existe de nombreuses options pour la maintenance de vos projets Python sous Linux en fonction de vos besoins et de votre accès. Cependant, s’il ya quelque chose que je retiens de cette réponse, j’espère que vous ne devriez presque jamais avoir besoin de l’utiliser sudopour installer des paquets Python . L'utilisation de sudodevrait vous faire sentir que quelque chose ne va pas. Tu étais prévenu.

Bonne chance et bon codage!

Mark Mikofski
la source
J'aurais aimé lire ceci avant de détruire la distribution Python de mon système en sudointeragissant avec pip. Superbe rédaction, merci pour cette information.
Slhck
pip install numpydevrait installer toutes les dépendances
Timo
@Timo, comme je l'ai mentionné dans la mise à jour 2017-03-27 depuis la mise en œuvre du PEP 513 par manylinux, les binaires numpy sont disponibles sur PyPI, qui sont construits avec OpenBLAS, c'est-à - dire qu'ils possèdent les dépendances requises. Cependant, en règle générale, pip install <package>installera uniquement les dépendances de paquet Python listées dans la install_requiressection de setup.py. Par exemple: l'installation de Jupyter n'installera pas la bibliothèque Haskell pandoc pour exporter des blocs-notes Jupyter au format LaTeX, etc.
Mark Mikofski
En revanche conda install <package>, toutes les dépendances, y compris C / C ++, FORTRAN, etc., y compris les bibliothèques Haskell, seront probablement installées, car conda ne gère pas uniquement les packages Python comme pip, il gère les environnements. Donc, si vous avez Anaconda ou miniconda, conda install Jupyterinstalle alors tout dans le fichier de la recettemeta.yml , y compris la bibliothèque pandoc Haskell . Pour plus d'informations, voir PyPA
Mark Mikofski
10

Outre l'ajout de Novarchibald, il est généralement judicieux de créer un environnement virtuel pour votre projet python et d'installer des dépendances à l'intérieur. Cela vous permet de mieux contrôler les dépendances et leurs versions. Pour configurer un environnement virtuel, entrez:

virtualenv --no-site-packages --distribute my_python_project

Ensuite, activez-le avec:

cd my_python_project
source bin/activate

À ce stade, tout ce que vous installez avec pip sera conservé dans cet environnement virtuel. Si vous souhaitez installer quelque chose de manière globale, vous devez d'abord quitter virtualenv avec:

deactivate

Vous pouvez en savoir plus sur virtualenv ici .

Voitek Zylinski
la source
1
Alternativement: en utilisant le pip du répertoire virtualenv bin (ici, my_python_project / bin / pip), vous gérez cet environnement sans avoir à l'activer. Ensuite - en utilisant l’un des scripts installés dans la corbeille, on utilise virutalenv. "activate" est seulement pratique pour faire des appels à "python", "easy_install" et "pip" en utilisant un bin spécifique à virtualenv.
Jan Vlcinsky
Les documents d'installation de Python disent d'utiliser "pyvenv" pour créer des environnements virtuels spécifiques à un projet; mais ce virtualenv est une solution de rechange pour les projets utilisant une version plus ancienne de python, docs.python.org/3/installing/index.html?highlight=pip .
pbhj
2
Notez que les virtualenvoptions --no-site-packageset --distributesont obsolètes de nos jours et n’ont plus d’effet.
Forage
4

En plus de la réponse Zetah'a, la commande pour installer python-pip depuis un terminal est la suivante:

sudo apt-get install python-pip
Novarchibald
la source
1

Essayez ceci Un framework d’interface graphique pour PIP développé avec PyQt4

Un framework d'interface graphique pour PIP développé en utilisant PyQt4

L'écran de démarrage

entrez la description de l'image ici

L'écran de démarrage contient des options permettant à un utilisateur de sélectionner le processus qu'il souhaite exécuter.

On peut aussi spécifier la version de python sur laquelle il souhaite que les opérations soient effectuées.

Le menu Fichier contient les options "Quitter" (raccourci: Ctrl + Q) et "Actualiser les listes" pour actualiser les fichiers de ressources contenant les données du package.

L'écran d'installation

entrez la description de l'image ici

L’écran d’installation comporte une barre de recherche que l’utilisateur peut utiliser pour rechercher et installer les packages souhaités.

L'écran de mise à jour

entrez la description de l'image ici

L'écran de mise à jour affiche la liste des packages obsolètes et pouvant être mis à niveau.

Le programme de désinstallation

entrez la description de l'image ici

L'écran de désinstallation affiche la liste des packages installés sur le système de l'utilisateur et pouvant être désinstallés.

La fenêtre de progression

entrez la description de l'image ici

La fenêtre de progression est un widget de terminal intégré à PIP-GUI qui affiche les processus en cours d'exécution.

gavisic
la source
1
Bienvenue sur Ask Ubuntu! Bien que cela puisse théoriquement répondre à la question, il serait préférable d’inclure ici les parties essentielles de la réponse et de fournir le lien à titre de référence.
Kevin Bowen le