{{tag>programmation vétuste}}
{{ :python.png?130| Logo Python}}
====== Langage de programmation Python ======
**[[wpfr>Python_(langage)|Python]]** est un langage de programmation interprété, orienté objet, dont l'utilisation va des scripts systèmes aux applications web.
Il est régi par une licence libre proche de la licence BSD et fonctionne sur la plupart des plateformes.
Par défaut, **Python** est installé sur Ubuntu. Saisir ''[[man>python3]]'' dans un [[:terminal]] donne donc accès à l'invite de commande Python. Pour connaître votre version de Python installé, entrez ''python3 -V'' dans le [[:terminal]].
**Python** est aussi un écosystème modulaire, qui propose une importante quantité de bibliothèques dont peut dépendre chaque script. Celles-ci sont centralisées sur le dépôt [[https://pypi.org/|PyPI]] est peuvent être gérées avec ''[[man>pip3]]''.
**Cependant** :
Sur Ubuntu, **Python** est étroitement lié au système. Pour une utilisation avancée on évitera donc d'utiliser la version native, installée par défaut (donc la commande ''[[man>python3]]''), ou ''[[man>pip3]]'', son gestionnaire de dépendance associé.
C'est là qu'intervient **[[https://github.com/pypa/pipx|pipx]]** (ou ses équivalents) :\\
**pipx** permet d'exécuter chaque script **Python** dans un environnement isolé, ce qui permet d'utiliser les versions de son choix avec les dépendances de son choix sans interférer avec le système (à la manière de //[[:docker|containers]]//, en plus simple).
Pour lancer un script local incluant une dépendance avec ''[[man>pipx]]'', la commande sera par exemple :
pipx run --spec dependence python3 script.py
où ''dependence'' est une bibliothèque **Python** dont dépend ''script.py''.
Pour plus d'information sur la programmation en Python, référez-vous au portail [[:programmation#python|Programmation]].
==== Logiciels éditeur Python (IDE) ====
Les logiciels pour éditer des scripts python :
^Nom^Cross Platform^Commercial ou Free^Auto Code Completion^Multi-Language Support^Integrated Python Debugging^Error Markup^Source Control Integration^Smart Indent^Bracket Matching^Line Numbering^UML Editing or Viewing^Code Folding^Code Templates ^Unit Testing^GUI Designer^Integrated DB Support ^ Rapid Application Development^
^Nom^CP^C/F^AC^MLS^PD^EM^SC^SI^BM^LN^UML^CF^CT^UT^UID^DB^RAD^comments^
|BlackAdder |**Y** | C | | | | | |Y | | | |Y | | | | | | |
|[[bluefish|BlueFish]] |**L** | | | | | | | | | | | | | | | | |
|Boa Constructor|**Y** | F |Y | |Y |Y | |Y |Y |Y | Y |Y |Y | | | | |
| ConTEXT |W | C | | | | | | | | | | | | | | | |
|DABO |**Y** | | | | | | | | | | | | | | | | |
| DreamPie | | F | | | | | | | | | | | | | | | |
|Dr.Python | | F | | | |Y | | | | | | | | | | | | |
|Editra |**Y** | F |Y | Y | | |Y |Y |Y |Y | |Y | | | | | |
|[[emacs|Emacs]] |**Y** | F |Y | Y |Y |Y |Y |Y |Y |Y | Y |Y |Y |Y | | | |
|[[eric|Eric Ide]] |**Y** | F |Y | Y |Y |Y |Y |Y |Y |Y |Y |Y |Y |Y |Y¹ |Y² | |¹QtDesigner ²Navigateur SQL intégré|
|E-Texteditor |W | | | | | | | | | | | | | | | | |
|[[geany|Geany]] |**Y** | F |Y*| Y | | | |Y |Y |Y | |Y | | | | | |* very limited|
|[[gedit|Gedit]] |**Y** | F |Y¹| Y | | | |Y |Y |Y | | |Y²| | | | |¹ with plugin ² sort of|
| [[idle|Idle]] |**Y** | F |Y | | | | | | | | | | | | | | |
| [[jedit|JEdit]] |**Y** | F | | Y | | | | |Y |Y | |Y | | | | | |
| [[kdevelop|KDevelop]] |**Y** | F | | Y | | |Y |Y |Y |Y | |Y | | | | | |
^Nom^CP^C/F^AC^MLS^PD^EM^SC^SI^BM^LN^UML^CF^CT^UT^UID^DB^RAD^comments^
| [[komodo_edit|Komodo]] |**Y** |C/F|Y | Y |Y |Y |Y |Y |Y |Y | |Y |Y |Y | |Y | |
| [[netbeans|NetBeans]] |**Y** | F |Y | Y |Y | |Y |Y |Y |Y | Y |Y |Y |Y | | | Y |
| NotePad++ |W | F | | Y | | | | | |Y | | | | | | | |
| Pfaide |W | C |Y | Y | | | |Y |Y |Y | |Y |Y | | | | |
| PIDA |**L**W| F |Y | Y | | | |Y |Y |Y | |Y | | | | | |VIM based
| PTVS |W | F |Y | Y |Y |Y |Y |Y |Y |Y | |Y | | |Y* | | Y |*WPF bsed
| [[:PyCharm]] |**Y** | C |Y | Y*|Y | |Y |Y |Y |Y | |Y | |Y | | | |* javascript
| PyDev([[eclipse|Eclipse]]) |**Y** | F |Y | Y |Y |Y |Y |Y |Y |Y | Y |Y |Y |Y | | | |
| Pyscripter |W | F |Y | |Y |Y | |Y | |Y | | |Y |Y | | | |
| PythonWin |W | F |Y | |Y | | |Y |Y | | |Y | | | | | |
| [[scite|SciTE]] |**Y** | F | | Y | |Y | | |Y |Y | |Y |Y | | | | |
| ScriptDev |W | C |Y | Y |Y |Y | |Y |Y |Y | |Y |Y | | | | |
| SPE | | F |Y | | | | | | | | Y | | | | | | |
| [[spyder|Spyder/spyderlib]] |**Y** | F |Y | |Y |Y | |Y |Y |Y | | | | | | | |
| [[sublime-text|Sublime Text]] |**Y** | C |Y | Y | | | |Y |Y |Y | | |Y | | | | |extensible w/python
| TextMate |M | | | Y | | | |Y |Y |Y | |Y |Y | | | | |
| UliPad |**Y** | F |Y | Y |Y | | |Y |Y | | | |Y |Y | | | |
| [[vim|Vim]] |**Y** | F |Y | Y |Y |Y |Y |Y |Y |Y | |Y |Y |Y | | | |
| [[visual_studio_code|VS Code/Codium]] | **Y**| F |Y | Y |Y |Y |Y |Y |Y |Y | |Y |Y |Y | | | [[https://code.visualstudio.com/docs/languages/python|module python pour codium/VSC]] |
| WingIde |**Y** | C |Y | Y*|Y |Y |Y |Y |Y |Y | |Y |Y |Y | | | |* support for C
| Zeus |W | C | | | | |Y |Y |Y |Y | |Y |Y | | | | |
^Nom^CP^C/F^AC^MLS^PD^EM^SC^SI^BM^LN^UML^CF^CT^UT^UID^DB^RAD^comments^
Acronymes:
* Y - Yes
* CP - Cross Platform — { multi-plateformes }
* C - Commercial — { sous licence commerciale }
* F - Free — { sous licence gratuite }
* AC - Automatic Code-completion — { finalisation automatique du code }
* MLS - Multi-Language Support — { intégration multilingue }
* PD - Integrated Python Debugging { interface de débogage du code Python intégrée }
* EM - ErrorMarkup — { procédure de balisage d'erreurs }
* SC - Source Control integration — { procédure de contrôle du code source intégrée }
* SI - Smart Indent — { formatage intelligent du code source }
* BM - Bracket Matching — { fermeture automatique des différentes parenthèses }
* LN - Line Numbering — { numérotation automatique des lignes de code }
* UML - UML editing / viewing — { édition et visualisation du langage unifié de modélisation graphique }
* CF - Code Folding — { procédure de repli synthétique du code source }
* CT - Code Templates — { modélisation/prototypage du code source }
* UT - Unit Testing — { tests des unités de commandes }
* UID - GUI Designer (for example, Qt, Eric, ..) — { module de conception des interfaces graphiques dédiées à l'utilisateur }
* DB - integrated database support — { intégration et gestion des bases de données }
* RAD - Rapid application development support — { gestion de la modélisation/du développement accélérés des applications }
* L - Linux
* W - Windows
* M - Mac
==== Logiciels de création d'interface graphique ====
Les logiciels et librairies pour créer des interfaces graphiques pour python:
* Tkinter (librairie python)
* QT Creator (logiciel) ou pyQT (librairie python) pour des interfaces en QT
===== Installation =====
==== Python 3 et Ubuntu ====
Depuis Ubuntu [[:bionic|bionic 18.04]], **Python 3** est installé par défaut et est accessible via la commande ''[[man>python3]]''.
Actuellement, Ubuntu [[:noble|24.04]] est livrée avec **Python 3.12**.
==== Les modules ====
Il faut souvent ajouter des modules (bibliothèques) à l'installation de base. Cela peut-être fait via les suites d'outils [[:python#anaconda]] ou [[:python#miniconda]] évoquées ci-dessous, mais si vous n'avez besoin que de quelques modules, il est possible de les ajouter avec le gestionnaire de paquets python [[wpfr>Pip_(gestionnaire_de_paquets)|PIP]], par exemple, pour installer le module PySerial (communication série)
pip install pyserial
Pour lister les modules installés :
pip list On peut ajouter l'option //--local// pour ne lister que ceux installés localement (dans //$USER/.local/bin//)\\
Sans l'option ci-dessus, il y en a beaucoup, aussi un //pipe// avec grep peut être utile !pip list | grep pyserial
==== IDLE 3 ====
Pour installer IDLE, il suffit d'installer ''idle-python3.xx'' où 3.xx est la version que l'on a de python et on l'exécute en utilisant ce même nom.
==== iPython/Jupyter ====
Voici les instructions pour installer [[wpfr>IPython]] et [[wpfr>Jupyter]] :
pip3 install jupyter
pip3 install ipython
==== Anaconda ====
La société Anaconda a fait des changements de licences qui peuvent entraîner la nécessité de payer pour accéder à certaines librairies.\\
Il existe plusieurs alternatives, notamment :\\
* Micromamba : https://mamba.readthedocs.io/en/latest/user_guide/micromamba.html
* Miniforge : installateur maintenu par conda-forge (communautaire) pour mamba/conda https://github.com/conda-forge/miniforge
* [[#pixi|Pixi]] : https://pixi.sh/latest/
Pixi semble être la solution la plus ergonomique pour gérer des environnements conda sans Anaconda ni Miniconda. Pixi présente pas mal d'avantages (https://prefix.dev/blog/pixi_a_fast_conda_alternative) et est très orienté science (https://prefix.dev/blog/pixi_for_scientists)
Enfin, il faut surtout désactiver le canal "defaults" des environnements conda en mettant "nodefaults" à la place (par exemple : https://github.com/pierrepo/env-logiciels-bioinfo/blob/main/cours/rnaseq.yml). En effet, conda va toujours utiliser ce canal "defaults" qui appartient à Anaconda.
Anaconda est une suite d'outils (plus de 200 paquets et plus de 500Mo) allant de l'éditeur [[:spyder|Spyder]] au framework [[:qt|Qt]] et [[:pyqt|PyQt]], en passant par [[https://jupyter.org/|jupyter]] pour les notebook, et de nombreuses librairies de programmation, //pip// et //pep8//…\\
Pour l'installer, reportez-vous à la page dédiée sur le site officiel:\\
[[https://docs.anaconda.com/anaconda/install/linux]]\\
La [[https://docs.anaconda.com/anaconda/packages/py3.6_linux-64|liste des paquets installés]] est visualisable via //anaconda-navigator// puis //Environnements//. En cas de soucis, pensez à mettre à jour le navigateur:
conda update anaconda-navigator
Attention, l'installation d'Anaconda peut entrer en conflit avec la version système de Python et ainsi causer problème avec certaines applications. Des problèmes ont été rencontrés avec les applications suivantes:
* [[hplip#mot_de_passe_root_demande|hplip]]
==== Pixi ====
Avec [[https://pixi.sh|Pixi]]((sous licence BSD-3… [[https://github.com/prefix-dev/pixi/blob/main/LICENSE]] qui utilise //conda-forge// également sous BSD-3 [[https://github.com/conda-forge/conda-forge.github.io/blob/main/LICENSE]])) , on peut complètement éviter de dépendre des serveurs de l'entreprise //Anaconda// et à la place dépendre des serveurs de //Prefix// (l'entreprise allemande derrière mamba et Pixi).
Pour l'installer :
curl -fsSL https://pixi.sh/install.sh | sh
# ou avec wget :
wget -qO- https://pixi.sh/install.sh | sh
Facile à mettre à jour en relançant l'installation ou
pixi self-update
==== Miniconda ====
Également basé sur le canal Anaconda. Les réserves exprimées ci-dessus sont donc également vraies pour Miniconda.\\
[[:Miniconda]] permet de limiter le nombre de paquets ou de n'installer que le strict nécessaire. Ça n'installe que le gestionnaire de paquet //conda//
===== Utilisation =====
De nombreuses ressources sont disponibles sur le web pour apprendre à programmer en Python, reportez-vous aux [[#voir_aussi|liens de cette page]]
==== Debugger avec PDB ====
Si vous êtes débutant, vous préférerez sans doute l'utilisation d'un [[#logiciel_editeur_python_ide|IDE]] tel que spyder, eclipse, pycharm
[[https://docs.python.org/3/library/pdb.html|PDB]] est une solution de débuggage en ligne de commande similaire à [[:gdb|GDB]]\\
Pour pouvoir l'utiliser, il suffit d'ajouter en début de votre fichier python la ligne:
import pdb; pdb.set_trace() # pour débugger… en ligne de commande !-)
Le //pdb.set_trace()// peut-être mis plus tard dans le code !
Reportez-vous à la doc de [[:gdb|GDB]] ou à [[https://docs.python.org/3/library/pdb.html|la doc officielle]] pour débugger (point d'arrêt, raccourcis…)
===== Logiciels liés à Python =====
Voici la liste des pages de la documentation présentant les logiciels liés au langage Python :
{{backlinks>.}}
===== Voir aussi =====
* **(//en//)** [[https://www.python.org/|Site officiel]]
* [[wpfr>Python_(langage)|Python]] sur wikipedia
* [[https://www.afpy.org/|Association francophone Python]]
* [[http://wikipython.flibuste.net/|Wiki Python francophone]]
* //[[http://python.lycee.free.fr/|Débuter avec Python au lycée]]//
* [[https://frederic-lang.developpez.com/tutoriels/python/python-de-zero/|Tutoriel complet]] sur developpez.com
* //[[https://openclassrooms.com/en/courses/7168871-apprenez-les-bases-du-langage-python|Apprenez les bases du langage Python]]// sur OpenClassrooms
* //[[http://www.jchr.be/python/manuel.htm|Introduction au langage Python3]]//
* [[https://inforef.be/swi/python.htm|Apprendre à programmer avec Python" - Gérard Swinnen]] librement téléchargeable à l'adresse [[https://inforef.be/swi/download/apprendre_python3_5.pdf]] (version janv. 2012)
* **(//en//)** [[https://python.swaroopch.com/]]
* **(//en//)** [[http://ipython.org/]]
* **(//en//)** **[[https://github.com/exaloop/codon|Codon]]** ou comment compiler et accélérer du code python ! et sa [[https://docs.exaloop.io/codon|documentation]]
* **(//en//)** **[[https://docs.astral.sh/uv/|uv]]**, gestion de projets et de paquets.
----
//Contributeurs : [[:utilisateurs:draco31.fr|draco31.fr]], [[:utilisateurs:eagle08|René Stoecklin]], [[:utilisateurs:bcag2]], [[:utilisateurs:krodelabestiole]].//