mardi, janvier 06, 2004

Installation et Utilisation de Installer5 (packaging Py/Win)

 


Installer 5 permet de créer un executable à partir de sources python. Il crée un .exe à partir des sources d'un projet.

Il réunit ainsi dans un répertoire :
* un fichier .exe contenant les sources compilées
* le fichier python22.dll
* les différents fichiers .pyd (lilbrairie dynamique python) employés par le projet

[rédigé avec les versions Installer 5b4 et python 2.2.1]

1. Download l'archive installer5b4 à http://www.mcmillan-inc.com/installer_dnld.html

2. La décompresser dans un répertoire ex: c:\dev\installer

3. En mode console, se placer dans c:\dev\installer

4. Création d'un fichier .spec, contenant les détails du projet à packager.






Code:
makespec.py c:\projet\fichier_principal.py


    notes:
    - lors de la création du .spec, les sources n'ont pas besoin d'avoir été compilées, installer se charge de les compiler
    - le fichier_principal est celui qui doit contenir le point d'entrée de l'application


5. Création du package (répertoire contenant le .exe, la DLL python et les .pyd).






Code:
build.py fichier_principal\fichier_principal.spec


    notes:
    - un répertoire du nom du fichier source principal a été crée dans c:\installer
    - le répertoire fichier_principal\dist+fichier_principal\ contient tous les fichiers nécessaires à une installation de l'application sur un poste windows quelconque

jeudi, janvier 01, 2004

Divers 2004 - Python


Module re (Regular Expression) - Search vs Match

"Python offers two different primitive operations based on regular expressions: match and search. If you are accustomed to Perl's semantics, the search operation is what you're looking for. See the search() function and corresponding method of compiled regular expression objects.

Note that match may differ from search using a regular expression beginning with "^": "^" matches only at the start of the string, or in MULTILINE mode also immediately following a newline. The ``match'' operation succeeds only if the pattern matches at the start of the string regardless of mode, or at the starting position given by the optional pos argument regardless of whether a newline precedes it. "


La différence entre match et search réside dans l'emploi de ^ et sa signification. Search considère que "^" représente le début de toutes les lignes. Match considère que "^" représente uniquement le premier caractère de la chaine à analyser et non le premier caratère de chaque nouvelle ligne.

Illustration :






Code:
>>> re.compile("^a",re.M).match("\na") # echec
>>> re.compile("^a",re.M).search("\na") # success

>>> re.compile("^a",re.M).match("toto\nabc") # echec
>>> re.compile("^a",re.M).search("toto\nabc") # succes - ici search est valide car "^" indique pour lui le début de n'importe qu'elle nouvelle ligne


Si on précise une position de départ d'analyse dans la chaine, cette position de départ est représentée par "^", dans ce cas match considére que le premier caractère est celui possédant comme index la position

Illustration :






Code:
>>> re.compile("^bonjour",re.M).match("salut\nbonjour\ntout le monde") # echec
>>> re.compile("^bonjour",re.M).match("salut\nbonjour\ntout le monde",6) # success - la position 6 est le \n


[note:re.compile(RegExp).match(Expression a tester, pos debut de test, pos fin)]

Exemples de la documentation :






Code:
re.compile("a").match("ba", 1) # succeeds
re.compile("^a").search("ba", 1) # fails; 'a' not at start
re.compile("^a").search("\na", 1) # fails; 'a' not at start
re.compile("^a", re.M).search("\na", 1) # succeeds
re.compile("^a", re.M).search("ba", 1) # fails; no preceding \n


Autres exemples :






Code:
>>> re.compile("toto\n^a",re.M).match("toto\nabc") # succes


Exemples d'utilisation de variable :






Code:
>>> re.match("(?P<name>.+) (?!(?P=name))","55 55") # echec
>>> re.match("(?P<name>.+) (?!(?P=name))","55 56") # succes



Méthodes Statiques


A partir de la version 2.2, python gère les méthodes statiques via la fonction staticmethod() :






Code:
class C:

def foo(x, y):
print "staticmethod", x, y
foo = staticmethod(foo)

C.foo(1, 2)



Traitements sur List ou Tuple


Pour appliquer un traitement à tous les éléments d'une liste, ou d'un tuple, et celà, récursivement.

exemple:
on veut multiplier par deux toutes les valeurs de l
l = [1 , [ 4 , 3 ] , 2 , [ [3,9],8] ]
l = [2 , [ 8 , 6 ] , 4 , [ [6,18],16] ]

fonction récursive de parcours :







Code:
def function(sequence):
if (type(sequence) is list) or (type(sequence) is tuple):
index = 0
for val in sequence:
function(val)
pass
else:
print sequence # traitment
pass
pass


fonction récursive pour modifier tous les éléments :
(attention, seul le type list peut être modifié en python)







Code:
def function(sequence):
if (type(sequence) is list):
index = 0
for val in sequence:
sequence[index] = function(val)
index = index + 1
pass
return sequence
else:
return sequence * 2# traitment
pass
pass



SGBDR et SGBDOO en Python

SGBDR écrit en Python :
Gadfly
l'enregistrement direct d'objets pythons en base, avec construction automatique d'une table mappant l'objet en question


SGBDOO Python :
Durus - Systeme de Persistance d'objet et Transaction
ZODB - Idem en plus avancé, utilisé dans Zope


Liens


Site officiel
http://www.python.org

Plusieurs liens python
http://www.python-eggs.org/links.html

Packaging de script python sous Windows
http://www.mcmillan-inc.com/install5_ann.html
http://starship.python.net/crew/theller/py2exe/

IDE Performant - HAP Python Remote Debugger
http://hapdebugger.sourceforge.net/

Psyco - optimiser lexecution dun code python
"Psyco is a specializing compiler for the Python language"
http://psyco.sourceforge.net/

Pyrex - permet d'écrire des extensions a python compilées en C
"A Language for Writing Python Extension Modules"
http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/

Plex - Module python implémentant GNU Flex (=Lex) - Analyseur lexical
http://www.cosc.canterbury.ac.nz/~greg/python/Plex/

"The Biopython Project is an international association of developers of freely available Python tools for computational molecular biology"
http://www.biopython.org/

Python Performance Tips
http://manatee.mojam.com/~skip/python/fastpython.html

SciPy
"Python for Scientific Computing Workshop"
http://www.scipy.org/

Numerical Python
"Numerical Python adds a fast, compact, multidimensional array language facility to Python"
http://pfdubois.com/numpy/

[Intégration autres langages]
Weave - "a Tool for Inline C/C++ in Python"
http://www.scipy.org/site_content/weave
PyInline - "Inline for Python"
http://pyinline.sourceforge.net/

[Crypto]
*Eric A. Young
http://www.python.org/workshops/1995-12/papers/kuchling.html
*PyCrypto
http://www.amk.ca/python/code/crypto.html
et http://www.amk.ca/python/writing/pycrypt/ (doc. complète sur la cryptologie)

[Framework Jeux]
PyGame
http://www.pygame.org/
PyKyra
http://sourceforge.net/projects/kyra


PythonWare Daily Python-URL (WebLOG Dev Python)
http://www.pythonware.com/daily/