Un très court tutoriel afin d’expliquer comment générer une page avec le langage Python sur un hébergement chez OVH. C’est-à-dire faire du CGI 😉
Le fait est qu’il est tout à fait possible de faire tourner des scripts écrits en Python (et même C) sur un hébergement mutualisé OVH (toutes les offres actuelles) !
Le gros problème est que la documentation à ce sujet est inexistante ou alors très bien cachée : je n’ai rien trouvé dans leur documentation en ligne… D’autant qu’il ne suffit pas de « balancer » un fichier « .py » et espérer qu’il fonctionne sans autre forme de procès !
Voici le canevas d’un script qui génère une page web :
#!/usr/bin/python print "Content-type: text/html\n\n" print "<html><head><title>Page de test</title></head><body>\n" print "<p>Hello World</p>\n" print "</body></html>\n"
Remarquez que les deux premières lignes sont obligatoires ! La première indique le chemin vers l’interpréteur Python et la deuxième l’entête de type de contenu envoyé au navigateur : elle doit contenir deux retours à la ligne !
Enregistrez le code dans un fichier avec l’extention « .cgi » (et pas « .py ») et envoyez-le sur votre espace FTP, dans n’importe quel dossier. Vous devez impérativement lui donner les droits (chmod) 705 pour que l’exécution puisse se faire !
Si vous avez fait comme il faut, un « Hello World » doit s’afficher quand vous accédez au script, sinon vous obtiendrez un code d’erreur 500 du plus bel effet…
Si je résume :
- S’assurer que le script contient le chemin de l’exécutable et l’entête ;
- Donner l’extension « .cgi » ;
- Donner les droits 705 ;
- Placer n’importe où sur l’espace d’hébergement ;
- Exécuter !
J’espère que ce tutoriel vous est utile et bonne programmation !
C’est bien mais … c’est du CGI!
Pas efficace donc, les ressources ne sont pas gardées en mémoire et rechargées constamment :/
Personnellement, j’avais également à le placer dans le dossier /cgi-bin/ (qui n’est pas dans /www/ mais était quand même accessible comme s’il se situait dans /www/).
Enfin, je rajouterais au moins ça si vous tentez vraiment à faire du CGI:
import cgi
import cgitb
cgitb.enable()
Le module cgi contient pas mal d’outil sympathique, le plus important étant cgi.escape (permettant d’échapper l’HTML ;)) et
form = cgi.FieldStorage() pour récupérer les données GET. (Je me suis jamais penché sur les données POST avec CGI …)
Enfin, attention que parfois, juste réuploader le fichier lui enlève ses droits (et du coup pouf l’erreur 500 qui explique rien).
La norme c’est de faire du WSGI. Seul problématique c’est que généralement il vous faudra un dédié ou un VPS pour faire ça … Contacter le support en cas de doute 🙂
Je vous conseille WSGI.
Merci JeromeJ pour ces informations complémentaires pertinentes 🙂
A ma décharge, je ne connais pas plus le CGI ni le Python que cela… De fait, cet article est volontairement très sommaire et n’explique que la base 😉
Pour ce qui est de la première ligne, ça marche pas tel quel (du moins sur mon mutu).
Par contre :
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
print "Content-type: text/html\n\n"
print "Page de test\n"
print "Hello World\n"
print "\n"
Fonctionne normalement quel que soit l’emplacement de l’exécutable.
La deuxième ligne permet de travailler avec les caractères accentués.
Le reste est pareil.
Dans tous les cas, merci pour le tuto 😛
Bonjour, merci pour ce tuto, j’ai testé et ca marche très bien même… Mon seul problème est de savoir si on peut importer des modules externes (les modules dont on importe avec la commande pip…)
Merci d’avance.
Bonjour,
Malheureusement, je n’en sais pas plus que vous sur le sujet. Il vous faudrait plutôt contacter le support d’OVH 😉
pour moi, ca ne marche pas si mon hebergement OVH. je me demande s’il n’y a pas un autre reglage qq part.
j’ai ca
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Les droits ont bien été définis à 705 ? Sinon j’avoue que je n’ai plus essayé depuis longtemps. Peut-être y a-t-il eu des changements entre temps.
Pour moi ca ne marche que si le fichier est à la racine. J’ai tout essayé et verifié les droits – le meme script tourne s’il est dans « www », et pas s’il est partout ailleurs…
Il est possible que la situation ait changé depuis 2013, il faudrait que je teste…
Merci pour ce tutoriel, il m’a fait gagner du temps 🙂