Configuration connue au 4 août 2010 sur cluster 002
Version: Python 2.4.4
Voici les modules disponibles pour vos programmes (411 modules)
- BaseHTTPServer
- Bastion
- CGIHTTPServer
- ConfigParser
- Cookie
- DocXMLRPCServer
- HTMLParser
- MimeWriter
- MySQLdb.connections
- MySQLdb.constants.CLIENT
- MySQLdb.constants.CR
- MySQLdb.constants.ER
- MySQLdb.constants.FLAG
- MySQLdb.constants.REFRESH
- MySQLdb.converters
- MySQLdb.cursors
- MySQLdb.release
- MySQLdb.times
- PIL.ArgImagePlugin
- PIL.BdfFontFile
- PIL.BmpImagePlugin
- PIL.BufrStubImagePlugin
- PIL.ContainerIO
- PIL.CurImagePlugin
- PIL.DcxImagePlugin
- PIL.EpsImagePlugin
- PIL.ExifTags
- PIL.FitsStubImagePlugin
- PIL.FliImagePlugin
- PIL.FontFile
- PIL.FpxImagePlugin
- PIL.GbrImagePlugin
- PIL.GdImageFile
- PIL.GifImagePlugin
- PIL.GimpGradientFile
- PIL.GimpPaletteFile
- PIL.GribStubImagePlugin
- PIL.Hdf5StubImagePlugin
- PIL.IcnsImagePlugin
- PIL.IcoImagePlugin
- PIL.ImImagePlugin
- PIL.Image
- PIL.ImageChops
- PIL.ImageColor
- PIL.ImageDraw
- PIL.ImageEnhance
- PIL.ImageFile
- PIL.ImageFileIO
- PIL.ImageFilter
- PIL.ImageFont
- PIL.ImageGL
- PIL.ImageGrab
- PIL.ImageOps
- PIL.ImagePalette
- PIL.ImagePath
- PIL.ImageSequence
- PIL.ImageStat
- PIL.ImageTransform
- PIL.ImageWin
- PIL.ImtImagePlugin
- PIL.IptcImagePlugin
- PIL.JpegImagePlugin
- PIL.McIdasImagePlugin
- PIL.MicImagePlugin
- PIL.MpegImagePlugin
- PIL.MspImagePlugin
- PIL.OleFileIO
- PIL.PSDraw
- PIL.PaletteFile
- PIL.PalmImagePlugin
- PIL.PcdImagePlugin
- PIL.PcfFontFile
- PIL.PcxImagePlugin
- PIL.PdfImagePlugin
- PIL.PixarImagePlugin
- PIL.PngImagePlugin
- PIL.PpmImagePlugin
- PIL.PsdImagePlugin
- PIL.SgiImagePlugin
- PIL.SpiderImagePlugin
- PIL.SunImagePlugin
- PIL.TarIO
- PIL.TgaImagePlugin
- PIL.TiffImagePlugin
- PIL.TiffTags
- PIL.WalImageFile
- PIL.WmfImagePlugin
- PIL.XVThumbImagePlugin
- PIL.XbmImagePlugin
- PIL.XpmImagePlugin
- Queue
- SimpleHTTPServer
- SimpleXMLRPCServer
- SocketServer
- StringIO
- UserDict
- UserList
- UserString
- aifc
- anydbm
- asynchat
- asyncore
- atexit
- audiodev
- base64
- bdb
- binhex
- bisect
- bsddb.db
- bsddb.dbobj
- bsddb.dbrecio
- bsddb.dbshelve
- bsddb.dbtables
- bsddb.dbutils
- calendar
- cgi
- cgitb
- chunk
- cmd
- code
- codecs
- codeop
- colorsys
- commands
- compileall
- compiler.ast
- compiler.consts
- compiler.future
- compiler.misc
- compiler.pyassem
- compiler.pycodegen
- compiler.symbols
- compiler.syntax
- compiler.transformer
- compiler.visitor
- cookielib
- copy
- csv
- curses.ascii
- curses.panel
- curses.textpad
- curses.wrapper
- dbhash
- debconf
- decimal
- difflib
- dircache
- dis
- distutils.bcppcompiler
- distutils.ccompiler
- distutils.cmd
- distutils.command.bdist
- distutils.command.build
- distutils.command.clean
- distutils.command.config
- distutils.command.install
- distutils.command.register
- distutils.command.sdist
- distutils.core
- distutils.cygwinccompiler
- distutils.debug
- distutils.dist
- distutils.emxccompiler
- distutils.errors
- distutils.extension
- distutils.filelist
- distutils.log
- distutils.msvccompiler
- distutils.mwerkscompiler
- distutils.spawn
- distutils.sysconfig
- distutils.tests.support
- distutils.unixccompiler
- distutils.util
- distutils.version
- doctest
- dumbdbm
- email.Charset
- email.Encoders
- email.Errors
- email.FeedParser
- email.Generator
- email.Header
- email.Iterators
- email.MIMEAudio
- email.MIMEBase
- email.MIMEImage
- email.MIMEMessage
- email.MIMEMultipart
- email.MIMENonMultipart
- email.MIMEText
- email.Message
- email.Parser
- email.Utils
- email.base64MIME
- email.quopriMIME
- filecmp
- fileinput
- fnmatch
- formatter
- fpformat
- ftplib
- getopt
- getpass
- gettext
- glob
- gopherlib
- gzip
- heapq
- hmac
- hotshot.log
- hotshot.stats
- hotshot.stones
- htmlentitydefs
- htmllib
- httplib
- idlelib.AutoExpand
- idlelib.Bindings
- idlelib.CallTipWindow
- idlelib.CallTips
- idlelib.ClassBrowser
- idlelib.CodeContext
- idlelib.ColorDelegator
- idlelib.Debugger
- idlelib.Delegator
- idlelib.EditorWindow
- idlelib.FileList
- idlelib.FormatParagraph
- idlelib.GrepDialog
- idlelib.IOBinding
- idlelib.IdleHistory
- idlelib.MultiStatusBar
- idlelib.ObjectBrowser
- idlelib.OutputWindow
- idlelib.ParenMatch
- idlelib.PathBrowser
- idlelib.Percolator
- idlelib.PyParse
- idlelib.PyShell
- idlelib.RemoteDebugger
- idlelib.RemoteObjectBrowser
- idlelib.ReplaceDialog
- idlelib.ScriptBinding
- idlelib.ScrolledList
- idlelib.SearchDialog
- idlelib.SearchDialogBase
- idlelib.SearchEngine
- idlelib.StackViewer
- idlelib.ToolTip
- idlelib.TreeWidget
- idlelib.UndoDelegator
- idlelib.WidgetRedirector
- idlelib.WindowList
- idlelib.ZoomHeight
- idlelib.aboutDialog
- idlelib.buildapp
- idlelib.configDialog
- idlelib.configHandler
- idlelib.configHelpSourceEdit
- idlelib.configSectionNameDialog
- idlelib.dynOptionMenuWidget
- idlelib.idle
- idlelib.idlever
- idlelib.keybindingDialog
- idlelib.rpc
- idlelib.run
- idlelib.tabpage
- idlelib.testcode
- idlelib.textView
- ihooks
- imaplib
- imghdr
- imputil
- inspect
- keyword
- lib-tk.Canvas
- lib-tk.Dialog
- lib-tk.FileDialog
- lib-tk.FixTk
- lib-tk.ScrolledText
- lib-tk.SimpleDialog
- lib-tk.Tix
- lib-tk.Tkconstants
- lib-tk.Tkdnd
- lib-tk.Tkinter
- lib-tk.tkColorChooser
- lib-tk.tkCommonDialog
- lib-tk.tkFileDialog
- lib-tk.tkFont
- lib-tk.tkMessageBox
- lib-tk.tkSimpleDialog
- lib-tk.turtle
- linecache
- locale
- logging.config
- logging.handlers
- macpath
- macurl2path
- mailbox
- mailcap
- markupbase
- mhlib
- mimetools
- mimetypes
- mimify
- modulefinder
- multifile
- mutex
- netrc
- new
- nntplib
- ntpath
- nturl2path
- opcode
- optparse
- os
- os2emxpath
- pdb
- pickle
- pickletools
- pipes
- pkgutil
- platform
- popen2
- poplib
- posixfile
- posixpath
- pprint
- pty
- pyclbr
- pydoc
- quopri
- random
- re
- reconvert
- regsub
- repr
- rexec
- rfc822
- rlcompleter
- robotparser
- sched
- sets
- sgmllib
- shelve
- shlex
- shutil
- site
- smtpd
- smtplib
- snack
- sndhdr
- socket
- sre
- stat
- statcache
- statvfs
- string
- stringold
- stringprep
- subprocess
- sunau
- sunaudio
- symbol
- symtable
- tabnanny
- tarfile
- telnetlib
- tempfile
- test.pystone
- test.regrtest
- textwrap
- this
- threading
- timeit
- toaiff
- token
- tokenize
- trace
- traceback
- tty
- types
- tzparse
- unittest
- urllib
- urllib2
- urlparse
- user
- uu
- warnings
- wave
- weakref
- webbrowser
- whichdb
- whrandom
- xdrlib
- xml.dom.NodeFilter
- xml.dom.domreg
- xml.dom.expatbuilder
- xml.dom.minicompat
- xml.dom.minidom
- xml.dom.pulldom
- xml.dom.xmlbuilder
- xml.parsers.expat
- xml.sax.expatreader
- xml.sax.handler
- xml.sax.saxutils
- xml.sax.xmlreader
- xmllib
- xmlrpclib
- zipfile
|
Où installer les fichiers python sur votre hébérgement mutualisé
Les fichiers peuvent être installés dans le répértoire www ou dans le répértoire cgi-bin
1- Si les fichiers sont installés dans le cgi-bin, ils peuvent porter l'extension "cgi" ou "py".
2- Si les fichiers sont installés dans le www, ils doivent porter l'extension "cgi".
L'extension "py" ne fonctionnera pas. Pour cel il faut modifier le fichier .htaccess en rajoutant la ligne suivante:
AddHandler cgi-script .py |
Premiers test de fonctionnement avec hello world
Editer le fichier ci-dessous et transférez le sur votre hébérgement
#! /usr/bin/python
print "Content-Type: text/html\n\n"
print """
hello world !
""" |
Comment éviter les erreurs 500
Voici un petit rappel des consignes à vérifier en cas d'erreur 500
1- Editer le fichier en mode "unix" afin d'éviter les retour de ligne en CR\LF. Certains éditeurs disposent d'une fonction de convertion "dos vers unix"
2- Assurez vous que le fichier soit en chmod 755. Il doit être executable
3- Vérifiez les 2 entêtes obligatoires et surtout vérifiez l'exactitude des caractères, les retours à la ligne et les espaces.
#! /usr/bin/python
print "Content-Type: text/html\n\n"
4- Si votre fichier python n'est pas interprété c'est que son extension n'est pas reconnu et donc le programme n'est pas traité. (voir plus haut) |
Afficher autre chose qu'une erreur 500 avec le module cgitb
Il est possible d'obtenir des informations concernant les erreurs de votre programme à la place de la traditionnelle page d'erreur 500 qui laisse parfois dans le désespoir. il faut, avant toute autre chose et juste après le chapeau appeler le module cgitb comme suit
#! /usr/bin/python
import cgitb
cgitb.enable() |
Python et les jeux de caractères
Bien que l'UTF-8 devienne petit à petit un standard, vous pouvez spécifier dans quel jeux de caractères doit travailler Python. Ainsi vous pouvez spécifier de l'ISO-88-59-1 (latin1) grâce à la commande ci-dessous qui doit être placé dès le début du programme sous le chapeau.
La ligne est toujours précédée du caractère #
#! /usr/bin/python
# -*- coding:Latin-1 -*- |
#! /usr/bin/python
# -*- coding:Utf-8 -*- |
Utiliser votre base de données mysql avec python sur hébérgement mutualisé ovh
Pour utiliser votre base de données mysql pour allez avoir besoin des mêmes paramètres que ceux nécessaires en php. Les fonctions mysql sont celles de l'API mysql pour C. Vous trouverez la liste de ces fonctions en cliquant ici. Pour utiliser mysql, vous devez appeler le module "_mysql".
#! /usr/bin/python
print "Content-Type: text/html\n\n"
import _mysql
db=_mysql.connect("server","login","password","bdd") db.query("""SELECT * from ma_table""") r=db.use_result() print r.fetch_row() |
Récupérer les données d'un formulaire avec le module cgi
Pour récupérer les données d'un formulaire, la technique est identique pour une requête http post ou get.
On utilise la méthode FieldStorage() qui ne peut être appelée qu'une seule fois.
Il faut noter qu'un champ de formulaire qui n'est pas renseigné revient à dire que ce champs n'existe pas.
Du coup, une instruction if ... else a été introduite pour bien montrer ce point précis.
"champ_test" est le nom d'un champ input.
exemple simple avec un champ input
#! /usr/bin/python
print "Content-Type: text/html\n\n"
import cgi
formulaire = cgi.FieldStorage()
if formulaire.has_key("champ_test"):
valeur = formulaire["champ_test"].value
else:
valeur ="vide"
print(valeur) |
La méthode getlist() permet de récupérer une liste de valeur quand plusieurs champs portent le même nom.
La méthode getvalue(clé, valeur_par_défaut) permet de récupérer la valeur transmise.
Le second paramètre est optionnel . Il permet de substituer une valeur par défaut à la valeur transmise.
#! /usr/bin/python
print "Content-Type: text/html\n\n"
import cgi
formulaire = cgi.FieldStorage()
#champ_test est un champ de type input type=text
print(formulaire.getvalue("champ_test"))
#champ_list est un champ de type checkbox
my_list = formulaire.getlist("champ_list")
#my_list est un tableau contenant les valeurs
print my_list
#on peut également afficher les valeur ainsi:
print ",".join(my_list)
|
Le cas des cases à cocher. Si on utilise un champ checkbox utilisant le même nom, seules les cases cochés retourneront leurs valeurs.
Soit un formulaire html avec deux cases à cocher checkbox = a (on ne coche pas la première) checkbox = b (on coche la seconde)
Le résultat du traitement donnera uniquement b
|
La fonction cgi.print_form(cgi.FieldStorage()) permet d'afficher d'un coup toutes les noms de champs d'un formulaire et leurs valeurs respectives.
#! /usr/bin/python
print "Content-Type: text/html\n\n"
import cgi
formulaire = cgi.FieldStorage()
cgi.print_form(formulaire) |
Les attributs permettant de récupérer les informations sur un champ de type file sont:
filename et type
La méthode read() permet d'acquérir le contenu du fichier
Exemple de récupération d'un champ file
#! /usr/bin/python
print "Content-Type: text/html\n\n"
import cgi
formulaire = cgi.FieldStorage()
#myfile est le nom du champ
print(formulaire["myfile"]).filename #nom du fichier
print(formulaire["myfile"].type) #type mime
print(formulaire["myfile"].file.read())#contenu du fichier
# pour enregistrer le fichier on aurait pu faire ainsi:
fichier = open(formulaire["myfile"], "w+")
fichier.write(formulaire["myfile"].file.read())
fichier.close()
|
Créer, enregistrer et lire un fichier
Créer, enregistrer, lire un fichier est très simple. La technique rappelle ce qui est utilisé avec php.
Ne pas oubliez de définir éventuellement le charset.
file("fichier","flag") permet d'ouvrir un fichier. flag vous permet d'indiquer le mode d'ouverture (w+,a etc...)
La méthode read() permet de lire le contenu. Si vous ne souhaitez récupérer qu'une partie du texte utilisez read([longueur]).
La méthode readline() permet de lire une seule ligne. Il est possible de limiter le nombre d'octets à lire en utilisant readline([longueur]).
La méthode write() permet d'écrire dans le fichier.
La méthode close() permet de fermer le fichier.
A noter: il existe un module appelé pickle qui permet d'enregistrer des données et de récupérer ensuite
ces mêmes données de manière séparée.
#! /usr/bin/python
# -*- coding:Latin-1 -*-
import cgitb
cgitb.enable()
print "Content-Type: text/html\n\n"
# création / enregistrement d'un fichier
contenu = "test de fichier"
mon_fichier = file("lisezmoi.txt","w+")
mon_fichier.write(contenu)
mon_fichier.close()
#lecture d'un fichier
le_fichier = file("lisezmoi.txt")
contenu = le_fichier.read()
le_fichier.close()
print contenu
|
Créer et récupérer des cookies
exemple de création simple d'un cookie de session
#! /usr/bin/python
import cgitb,os,Cookie
cgitb.enable()
le_cookie = Cookie.SimpleCookie()
le_cookie['mon_nom'] = "ma_valeur"
print le_cookie
print "Content-Type: text/html\n"
|
exemple de création d'un cookie avec paramètres
#! /usr/bin/python
import cgitb,os,Cookie
cgitb.enable()
le_cookie = Cookie.SimpleCookie()
le_cookie['mon_nom'] = "ma_valeur"
#expiration
le_cookie['mon_nom']['expires'] = 30 * 24 * 60 * 60
#chemin
le_cookie['mon_nom']['path'] = "/"
#limitation pour un domaine
le_cookie['mon_nom']['domain'] = ".mon_site.com"
print le_cookie
print "Content-Type: text/html\n"
|
exemple de récupération d'un cookie
#! /usr/bin/python
import cgitb,os,Cookie
cgitb.enable()
le_cookie = Cookie.SimpleCookie()
chaine_serialise = os.environ.get('HTTP_COOKIE')
le_cookie.load(chaine_serialise)
ma_valeur = le_cookie['mon_nom'].value
print "Content-Type: text/html\n\n"
print ma_valeur
|
Python, le web et les sessions
Il n'existe pas de module directement utilisable pour gérer les sessions comme c'est le cas avec un langage comme php.
Il est possible de gérer la persistance des informations avec les cookies. Plusieurs solutions existent pour combler ce vide.
Pour citer juste que quelques solutions....
-Le framework Cherrypy vous propose de nombreux outils pour effectuer des développements web et en particulier une gestion des sessions.
-Le projet Jon py propose un module session
-Pour faire simple et direct une classe est disponible sur CodePoint.net en cliquant sur ce lien. Elle utilise les cookies pour stocker un identifiant de session et stocke les données dans un fichier sur le serveur. Il faudra certainement remanier le code pour stipuler un répertoire valide sur votre hébérgement. Il utilise le module shelve.
Cet exemple montre qu'il est tout à fait envisageable de développer assez rapidement un module proche des techniques décrites dans la fonction session_set_save_handler de php à savoir les méthodes open, read, close, write, destroy et la gestion du garbage collector.
Voila un projet intéressant...
Quelques fonctions utiles dans le module python "os" et "shutil"
Les exemples valent mieux que des longs textes... voir ci-dessous
#! /usr/bin/python
import cgitb,os
cgitb.enable()
print "Content-Type: text/html\n\n"
#chemin du script courant depuis la racine
#sans le nom du script
print os.getcwd()
#change de répértoire courant
os.chdir("repertoire")
#change le nom d'un fichier
os.rename("fichier_source","fichier_destination")
#créé un répertoire
os.mkdir("mon_repertoire")
#liste les fichiers d'un répértoire
#et conseigne les résultats dans un tableau
print os.listdir("mon_repertoire")
#execution d'une commande system
os.system("commande")
#nom de la page appelante (referer)
print os.getenv("HTTP_REFERER","")
#le fichier existe-il ? indique vrai
#si la condition est remplie
if os.path.exists("mon fichier"): etc...
#nom est-il un fichier ? indique vrai
#si la condition est remplie
if os.path.isfile("nom"): etc...
#nom est-il un répertoire ? indique vrai
#si la condition est remplie
if os.path.isdir("nom"): etc...
#copy d'un fichier en gardant les permissions
shutil.copy("lisezmoi.txt","blabla.txt")
#copy d'un fichier sans garder les permissions
shutil.copyfile("lisezmoi.txt","blabla.txt")
|
Conclusion
L'idée était de présenter quelques pistes générales pour prendre rapidement en main un langage comme Python sur votre hébérgement mutualisé et pouvoir ensuite se laisser à pythonner...
Pouvoir executer un code python, se connecter à une base de données, traiter les données d'un formulaire, écrire ou lire des fichiers, utiliser des cookies permet déjà de mettre en place des fonctionnalités indispensables pour un site web.
Maintenant le plus dur reste à faire.. Plonger au coeur du langage !
Utiliser Python uniquement pour faire du web c'est peu dommage. Php est très bien pour ca. L'intérêt est d'apprendre à utiliser un langage très puissant et souple qui pourra servir pratiquement à faire tout n'importe où : sous Linux, sous Windows, avec ou sans Apache, sur le web, pour créer une application, pour les mobiles etc...
Liens utiles concernant Python
Voici une liste de liens concernant le langage Python. Cette liste n'est pas exhaustive.
|