Sommaire
Il existe trois catégories générales de modules avec lesquels vous traitez:
- Ces programmes de support installés pour tous les utilisateurs avec le système de package OS. (Cela peut même inclure des outils et des bibliothèques utilisés par des personnes programmant en Python; voir ci-dessous.) Pour ceux-ci, vous utilisez les packages du système d'exploitation où vous le pouvez et
pip
installez-les dans les répertoires système si nécessaire.
- Ces programmes de support installés par un utilisateur particulier uniquement pour son propre usage, et aussi pour certains aspects de son utilisation "quotidienne" de Python comme langage de script. Pour cela, elle utilise
pip --user
, peut-être pyenv ou pythonz , et des outils et tactiques similaires.
- Ceux qui soutiennent le développement et l'utilisation d'une application spécifique. Pour cela, vous utilisez
virtualenv
(ou un outil similaire).
Ici, chaque niveau peut également bénéficier de l'assistance d'un niveau précédent. Par exemple, notre utilisateur dans (2) peut s'appuyer sur un interpréteur Python installé via des packages OS.
Entrer dans cela un peu plus en détail:
Programmes et packages système
Les programmes écrits en Python que vous voulez "simplement exécuter" sont faciles: utilisez simplement les outils d'installation du système d'exploitation et laissez-les apporter tout ce dont ils ont besoin; ce n'est pas différent d'un programme non Python. Cela est susceptible d'apporter des outils / bibliothèques Python (tels que l'interpréteur Python lui-même!) Sur lesquels les utilisateurs de votre machine peuvent commencer à compter; ce n'est pas un problème tant qu'ils comprennent la dépendance et, idéalement, connaissent des moyens alternatifs pour la gérer sur les hôtes qui ne fournissent pas ces dépendances.
Un exemple simple et courant d'une telle dépendance est certains de mes scripts personnels ~/.local/bin/
qui commencent par #!/usr/bin/env python
. Celles-ci fonctionneront correctement (tant qu'elles s'exécutent sous Python 2) sur RH / CentOS 7 et la plupart (mais pas toutes) des installations Ubuntu; ils ne seront pas sous une installation Debian de base ou sous Windows. Tout comme je n'aime pas mon environnement personnel ayant beaucoup de dépendances sur les packages de système d'exploitation (je travaille sur un certain nombre de systèmes d'exploitation différents), quelque chose comme ça, je le trouve assez acceptable; mon plan de sauvegarde sur les rares hôtes qui n'ont pas de système Python et ne peuvent pas en obtenir un est d'utiliser un système utilisateur comme décrit ci-dessous.
Les personnes utilisant un interpréteur python système dépendent également généralement du système pip3
. C'est à peu près là que je trace habituellement la ligne sur mes dépendances système; tout de l' virtualenv
avant je m'occupe de moi-même. (Par exemple, mon script standard activate repose sur tout pip3
ou pip
est sur le chemin, mais télécharge sa propre copie virtualenv
pour amorcer l'environnement virtuel , il est la création.
Cela dit, il y a probablement des circonstances où il est tout à fait raisonnable de rendre plus disponible un environnement de développement. Vous pouvez avoir des interfaces Python dans des packages complexes (tels qu'un SGBD) où vous souhaitez utiliser la version système de cela et vous pensez qu'il est préférable de laisser également le système choisir le code de bibliothèque Python particulier que vous utiliserez pour lui parler. Ou vous pouvez déployer de nombreux hôtes avec un environnement de développement de base pour une classe Python, et trouver plus facile à automatiser avec des packages système standard.
Programmes et packages utilisateur "au jour le jour"
Les utilisateurs peuvent avoir des bibliothèques ou des programmes Python qui ne s'intègrent pas bien dans un environnement virtuel parce qu'ils veulent aider à créer des environnements virtuels en premier lieu (par exemple, virtualenvwrapper ) ou ce sont des choses que vous utilisez couramment depuis la ligne de commande même lorsque faire du travail non-Python. Même s'ils ont la possibilité d'installer des versions système de ceux-ci, ils peuvent se sentir plus à l'aise d'installer les leurs (par exemple, parce qu'ils veulent utiliser la dernière version de l'outil et ses dépendances).
C'est généralement pip --user
ce que les gens vont utiliser pour cela, bien que certaines dépendances, telles que l'interpréteur Python lui-même, nécessitent un peu plus que cela. pyenv et pythonz sont utiles pour construire des interprètes personnels (qu'ils soient installés ~/.local/bin
pour être l'interpréteur par défaut ou autre), et bien sûr, on peut toujours simplement construire "à la main" à partir des sources si les bibliothèques de développement sont disponibles.
J'essaie de garder le strict minimum installé ici: virtualenvwrapper (parce que je l'utilise constamment) et peut-être la dernière version de pip. J'essaie d'éviter les dépendances en dehors de la bibliothèque standard ou sur Python 3 pour les scripts personnels que j'écris pour être utilisés sur de nombreux hôtes. (Bien que nous verrons combien de temps je peux tenir avec cela alors que je déplace de plus en plus de ces scripts personnels vers Python.)
Environnements de développement d'applications et d'exécution distincts
C'est la chose virtualenv habituelle. Pour le développement, vous devez presque toujours utiliser un virtualenv pour vous assurer que vous n'utilisez pas les dépendances du système, ou souvent plus d'un pour tester différentes versions de Python.
Ces environnements virtuels conviennent également aux applications comportant de nombreuses dépendances où vous souhaitez éviter de polluer votre environnement utilisateur. Par exemple, j'ai généralement mis en place un virtualenv pour exécuter les blocs-notes Jupyter et autres.