Python + Flask + PythonAnywhere : Partie 1 - Que choisir ?

Cette série d'articles se penche sur:
  1. L'évaluation d'un projet web basé sur le Micro FrameWork Flask écrit en Python.
  2. Préparation d'un environnement sous Windows (Python et Flask)
  3. Mise-en-ligne et configuration du projet chez l'hébergeur PythonAnywhere.com (qui fait de l'hébergement autour de Python).
En 8 heures, j'ai installé, testé Flask (sous Windows) et appris assez de Flask pour savoir qu'il conviendra à nos besoins.
Le programme de test issu des tutoriels Flask fut mis en ligne chez PythonAnywhere (la sélection du fournisseur + tests ont nécessités environs 4 heures).
Bref, 12 heures pour apprendre, valider et mettre en ligne chez un hébergeur sont le résultat d'une solution offrant une courbe d'apprentissage hors norme.

Ayant finalement terminé la validation technique de cette approche, j'écris ici une petite série d'articles pour partager mon retour expérience.

A propos du projet
Tout commence souvent par un projet et des convictions personnelles. Les convictions sont résolument open-source et orienté Python.
Le projet découle lui de la vie professionnelle que voici:

Chez Guy Gerard (mon employeur) nous avons travaillé d'arrache pied pour stocker les informations, descriptions, photographies, traitement d'image, etc en vue de produire/générer notre catalogue papier. Ce catalogue est actuellement en cours d'impression chez un imprimeur, pour les plus curieux, il est disponible ici en format PDF.

La DB est en PostgreSql (tient du libre) et notre bon vieux programme de gestion, écrit en Clipper, à été adapté pour supporter les environnements multi-utilisateur, PostgreSql  (tient du libre) et nos besoins. Tout cela rendu possible grâce à Harbour-Project et Gimp (tient, encore du libre) mais aussi Excel, Publisher, PowerShell (pilotés depuis notre logiciel en Clipper).
Il est prévu que ce logiciel soit entièrement ré-écrit en Python dans les 3 années à venir (d'où la naissance du projet Audacious... dans l'esprit l'Open-Source)

Le papier c'est bien mais le Web c'est mieux
Notre domaine d'activité nécessite ce type de catalogue papier (la recherche à vue est un point critique). Disposer d'un Catalogue sur le WEB c'est aussi très bien pour aiguiller facilement les clients. J'ai bien dit Catalogue et non WebShop!

Rien de tel qu'un catalogue en ligne permettant une recherche hiérarchique, sur base d'un mot clé... ou même d'un ID Produit.

Nous avons déjà l'information dans nos bases de données, il ne reste plus qu'a l'exploiter... mais avec quelle solution?

Quels approche pour faire un catalogue en ligne ?
L'approche la plus simple ce serait d'installer PHP et pourquoi pas des WebShop comme PrestaShop ou Magento. Je sais par expérience personnelle que l'API PrestaShop réclame un certain investissement (voir cet article mais aussi PrestaConsole) et je vais probablement me retrouver avec un environnement de développement assez lourd.

Source: www.djangoproject.com
A côté de cela, je suis plutôt pro Python (utilisé par Google, Amazone, Microsoft lui-même, Disney, DropBox, etc). Je n'ai rien contre PHP, largement leader dans ce domaine, c'est juste une question de conviction.
Python est le seul langage qui s'adapte du microcontrôleur (Micro Python PyBoard) jusqu'à des infrastructure de la taille de Google App Engine et qui se programme à partir d'un simple éditeur de texte (comme notepad). La courbe d'apprentissage offerte par Python est très élevée, il est possible de devenir productif en 4 heures seulement (vraiment).

Une des solutions phare serait encore Django, écrit en Python. Encore une fois, les premières recherche laisse entrevoir un investissement non négligeable avant de pouvoir produire du contenu (je n'ai que 2800 produits à mettre en ligne et aucun besoin de gestion complexe d'utilisateur, de droits, etc). Django à cet avantage d'arriver avec toute une série d'outils... il y a du pour et probablement peu de contre. Cependant, je dois démarrer rapidement et dispose de peu de temps à investir.

Source: flask.pocoo.org

C'est là que Flask débarque au milieu de mes recherches. J'ai déjà entendu parlé de ce Micro Framework capable de fonctionner sur les nano-ordinateurs tels que le Raspberry-Pi.
Mon premier réflexe est donc de penser à tort que "Flask serait plutôt un jouet".

L'article de "Why Flask" paru sur Butenas.com m'a interpellé tant et si bien que j'ai été jeter un oeil sur Flask. Il n'aura fallut 4 heures pour comprendre et exploiter les fondamentaux de Flask (leur tuto est vraiment incroyable) et ainsi savoir que Flask me rendra les services attendus.

C'est plier... ce sera Flask.

Je peux affirmer que le contenu de cet article de Butanas est très pertinent et je vais certainement le traduire en Français pour mémoire.

L'hébergement d'une solution WEB Python
Un autre point à soulever c'est l'hébergement d'une solution Python.
Bon nombre de prestataire supporte PHP sans aucun soucis... par contre, pour Python c'est le désert (ou presque).
Sam & Max ont écrit le billet "Quel hébergement Web pour les projets Python ?"... et quand il s'agit de Python il y a relativement peu d'option.
Sur les hébergeurs classiques (OVH par exemple, que j'apprécie assez dans la jungle des hébergeurs ) cela revient quasi à prendre la casquette de SysAdmin.
Je dois avouer qu'investir une telle énergie avant même de faire tourner mes premiers script Flask ne me tente absolument pas.

Parmi toutes les options collectées (voyez la liste proposée sur l'article de Sam&Max), je me suis penché sur PythonAnywhere.com .

Source: PythonAnywhere

Pourquoi PythonAnywhere?
  • Hé bien, PythonAnywhere s'est volontairement spécialisé dans l'hébergement Python.
    Pourquoi feraient-ils un tel choix idéologique sans nous offrir un hébergement à la hauteur de leur ambition?
  • La liste des modules Python supportés chez PythonAnywhere est bien fournie.
  • Il est possible de créer un site pré-configuré pour Flask, DJango (et quelques autres) en quelques secondes.
  • PythonAnywhere est situé en Grande Bretagne (pas si loin de nous en fin de compte)
  • PythonAnywhere utilise les infrastructures d'Amazon EC2 (bref, il y a du répondant côté infrastructure)
  • PythonAnywhere propose un compte "Beginner" pour découvrir gratuitement le hosting Python.
  • Les prix sont franchement abordables (le compte Hackeur à 5$/mois et compte WebDev à 12$/mois) pour le packaging.
  • PythonAnywhere propose des DB MySql (inclus dans toutes les offres, même gratuite), PostgreSql (sur demande) et supporte sqlite3 sans aucune modification!
  • et bien d'autres points qui mériteraient un article dédié.
Finalement et le meilleur étant pour la fin, j'ai installé et fait fonctionné l'application de test FlaskR que nous découvrirons au fil des articles sur PythonAnywhere... sans me prendre la tête et sans avoir besoin du support technique. Cela fera l'objet d'un article dédicacé.

A la fin de cette série d'article, nous saurons toute ce qu'il à a vraiment d'essentiel à savoir pour faire un développement sous Flask (sur sa machine) et le faire héberger.

Python 2.7 ou Python 3?
La logique voudrais que l'on choisisse Python 3.
Ce tutoriel fut pourtant écrit autour de Python 2.7 (un choix plutôt dans le vent en 2010 et non en 2015). La raison est simple... je voulais étudier cette option en rencontrant le moins de freins possibles (comprenez, problèmes de compatibilité, interopérabilité, disponibilités chez l'hébergeur).
J'ai donc ratissé large et opté pour Python 2.7 encore très/trop bien représenté.
  • Si vous êtes à la découverte, suivez ce tutoriel avec python 2.7.
  • Si vous iriez plutôt vers Python 3, vous pouvez faire un test avec Python 2.7
    Puis désinstaller Python 2.7 et passer à Python 3 (voyez le point suivant)
  • Si vous êtes Python 3, voyez le point suivant.
Et si je veux utiliser Python 3?
Hé bien, il n'y a aucun problème. J'ai personnellement reconduit le test en désisntallant Python 2.7 et réinstallant python 3.4.
Cela nécessite d'installer Flask pour Python 3 (chez l'hébergeur PythonAnywhere) et d'invoquer Python depuis une console bash à l'aide de la commande python3 ... en effet, la commande python lance un interpréteur de version 2.7.

Bref, No problem!

Tous les articles de ce tutoriel
Ce tutoriel est divisé en plusieurs parties... vous pouvez y accéder facilement grâce au liens suivants: