Quel est votre environnement de développement Python ?


#1

Reprenant depuis peu le dev’ Python, sur un gros projet, je réfléchis à mon environnement de dev’ et cherche à définir ce qui correspondrait le mieux à mes besoins.

D’où ma question : comment vous organisez-vous pour faire du dev’ Python ?
Je suis particulièrement intéressé par la gestion des cas “tordus”, comme la possibilité de faire facilement des déploiements un peu touchy, de débugger alors qu’il y a un launcher (un peu à la django), etc.


A propos de la catégorie Python
#2

J’utilise pour ma part Komodo Edit.

Les fonctionnalités que je trouve intéressantes sont les suivantes :

  • synthax checking natif et améliorable avec des programmes tiers (j’ai lié pyflakes à l’éditeur pour python)
  • support natif de la syntaxe des templates Django
  • on peut se faire une toolbox personnalisée pour lancer des commandes comme manage.py avec les arguments et les variables d’environnement que l’on souhaite.
  • il supporte nativement tous les langages que je connais : C/C++ / Java / Python / Rebol / Ruby et bien d’autres
  • personnalisation des encodages, des valeurs de tabulations, des “line endings” par langage
  • il tourne sur pas mal d’OS (Linux, FreeBSD, OpenBSD, MacOS, Windows …)
  • si on connaît XUL, il est possible de faire des plugins de la même manière qu’avec Firefox
  • l’éditeur est libre et gratuit (sources sur github)

Ses défauts (oui il y en a quand même)

  • selon la configuration il peut être long à démarrer
  • l’auto-complétion est de qualité moyenne

#3

De ma petite expérience développement Python, il y a une chose universelle que je recommande : utilise des virtualenv.

Built-in Python depuis 3.3 (http://legacy.python.org/dev/peps/pep-0405/) sinon un simple pip install virtualenv.

Les virtualenv te permettront d’isoler tes dépendances voire même la version python.

J’ajoute aussi deux autres outils que j’utilise au jour le jour :

  1. PyCharm, un IDE Python de la firme Jetbrains aussi connu pour le fabuleux IntellijIdea.
  2. Ansible, un provisioner écrit en Python direct concurrent de Chef/Puppet mais je le trouve plus accessible. Parfait pour tout type de déploiement.

#4

Pour compléter la suggestion de @kakawait, pour gérer ses virtualenv, essayer absolument virtualenvwrapper. Ça installe des commandes shell pour créer, lister, supprimer des environements, pour se déplacer facilement dans l’arbo de l’environnement, etc. L’essayer c’est l’adopter !

Pour le développement compatible avec plusieurs version de Python/Django/etc., regarder tox, ça automatise la création de virtualenvs et ça permet de lancer ta suite de tests dans tous ces environements en une seule commande. Indispensable si tu développes une bibliothèque open source.

Un autre outil indispensable : flake8, ça évite des erreurs typiques des langages dynamiques (variables non déclarées par exemple) et ça signale les manquements au standard de codage PEP8. Tous les éditeurs dignes de ce nom fournissent une intégration avec flake8 sous forme de plugin et bien entendu le mettre en premier dans ton script d’intégration continue, avant même d’exécuter les tests.

Qu’est-ce que tu entends par là ?


#5

Sur Django, tu lances une instance avec “python manage.py runserver”.
Si tu es sur PyCharm, par exemple, et que tu souhaites faire du debug sur l’instance en plaçant des breakpoints, ça ne marche pas, nativement. Un plugin existe pour gérer ça pour Django, mais dans mon cas, je n’utilise pas Django, mais un autre framework qui a un équivalent de manage.py nonpris en charge par un plugin :) (oui, certes, je pourrais sans doute adapter le plugin sans trop de difficulté, mais bon ^^ je demande quand même :p)


#6

Pour ma part je me contente de mettre cette ligne dans mon code :

import pdb; pdb.set_trace()

Et le runserver se tranforme en prompt pdb et je peux débugger.

Tu peux aussi regarder du côté du debugger de werkzeug qui est notamment intégré dans Pyramid et qui permet de debugger dans le navigateur lorsque tu as une exception.