Script Python
Un article de WikiSigPlus.
← Version précédente | Version suivante →
manifold supporte grace à win32all ou ironpython l'environnement python (os python et modules).Le passage d'un script python lancer depuis le file system de l'os a un script lancer depuis la fenêtre projet de manifold nécessite de mettre dans le fichiers script de manifold les imports au début, puis les def puis enfin notre programme dans def Main(): sans oublier d'indenter le texte avec que des tab ou des espaces .
Sommaire |
installer
- Ce chapitre va passer en revue les modules python interessant a installer en cartographie.LE premier chapitre resumes les mdules , les suivant montrent comment installer ses modules
modules python
- Les modules utilisables sont repétoriés ci dessous mais ilexiste un hack a ne pas utiliser ne production regroupant gdal ogr mapscript ...(web)
modules python (alphabétique) ( voir aussi postgis
| modules | python 2.3 | python 2.4 | python 2.5 | commentaires |
| ctype | 1.0.2 | include | ||
| Django (web) | 1.0 tar | |||
| Djangogeo (web) | ||||
| elementtree (web) | 1.2.6 | 1.2.7exe-zip | ||
| lxml (web) | 2.1.2 tgz | |||
| maplotlib (web) | 0.98.3 egg], exe | |||
| mxdateTime(web) | 3.1.1 (exe) | 2.0 tar | ||
| Numeric/numpy(web) | 24.2 | 24.2->1.2.0 | ||
| PIL(web) | 1.1.6 | 1.1.6 | ||
| Postgres PyGreSQL(web) | 3.8.1 | python 2.4.3 postgresql 8.1.4 | ||
| Postgres Psycopg [web] | ||||
| pywin32(web) | 212 | 212 | 212 | |
| septutools | 0.6c1 zip | |||
| simplejson (web) | tar 1.4] | |||
| geopy(web) | 0.93 egg | |||
| zope (web) | (2.8.8) | 2.11.1 exe | ||
| PCL (web) | 0.10.0 zip | Python cartographic Library | ||
| MySQL-python | (1.2.2 | web) | le serveur mysql doit être installer | |
| Scipy (web) | 0.6.0 | 0.6.0 | 0.6.0 |
environnement python
Le téléchargement et l'installation doit prendre en compte le même numéro de version de python et génère les fichiers de documentation accessible en ligne (web) ou localement accessible sur un navigateur à l 'adresse http://localhost:7464/ après lancement du serveur python
C:\Python24\Tools\Scripts\pydocgui.pyw
ou en ligne .Après installation d'un module ( mysql, geopy...); il faut tester le module en ouvrant une fenêtre par Démarrer|executer|python puis en tapant import suivit du nomduModule ( en faisant attention à la case : majuscule/minuscule) si apparrait "ImportError:No module named nomduModule" alors le module n'est pas installé (voir exemple ci dessous pour driver MS SQL
>>>import pymssQl
Traceback (most recent call last):
File "<pyshell#1>", line 1, in -toplevel-
import pymssQl
ImportError: No module named pymssQl
.
- python (web,download).tester la version installé avec Démarrer|Executer|python
- pywin32 ( anciennement win32all )wiki,download 4.2Mo).Tester avec la commande "import win32com".
>>> import win32com
- ez_setup (py),cliquer sur celui ci entraine l installation du fichier PYTHON_HOME\Scripts\easy_install.exe qui va être appeler par
installer module easy_install.exe /x/y.egg easy_install.exe http://wwww.domainname.lang/directory/z.tar.gz tester installation de ez_setup >>> import pkg_ressources >>>
ez_setup et donc easy_install.exe fait en une ligne les lignes suivantes
>>>wget http://pexpect.sourceforge.net/pexpect-2.3.tar.gz >>>tar xzf pexpect-2.3.tar.gz >>>cd pexpect-2.3 >>>sudo python ./setup.py install
- ipython est un shell en python non porté sous vista et surpportant ...... la complétion et la colorisation si les modules Readline (download) basé sur ctypes (download) sont installés.L'utilisation de ces fonctionnalités se font par touche <tab> situé à gauche du a de azerty sur le clavier(web)
C:\Python24\Scripts\easy_install.exe http://ipython.scipy.org/dist/ipython-0.7.3-py2.4.egg PATH=path du répertoire contenant le fichier ipython.exe c:\Python24\Scripts\ipython.exe tester par exemple sur Manifold.Mapserver par In [1]: import win32com.client In [2]: d=win32com.client.Dispatch("Manifold.MapServer") In [3]: d.<tab><enter> d.CLSID ......... In [4]: d.CLSID Out[5]: IID('{3F343549-7ABF-11D5-BAFA-00A0C98DED6D}')
pour avoir la completion taper ceci dans le shell
>>> import rlcompleter, readline
>>> readline.parse_and_bind('tab: complete')
installation des modules
- ---MySQLdbpossède un driver python de nom MySQL-python-1.2.2.win32-py2.4.exe(download,web) respectant la norme DB-API permettant a partir d'un script python de se connecter à mysql (web ).mysqldb supporte de nombreux drivers (web).
>>> import MySQLdb
conn = MySQLdb.connect (host = "localhost",user = "testuser",passwd = "testpass", db="test")
cursor = conn.cursor ()
cursor.execute ("SELECT VERSION()")
row = cursor.fetchone ()
print "server version:", row[0]
cursor.close ()
conn.close ()
- ---MS SQL (download) est le driver python d'acces à MS SQL .
>>> import pymssql >>>
- ---win32all peut aussi être utilisé pour l'accès au drivers génériques de microsoft ADO(wiki)
>>> db=win32com.client.Dispatch(r'ADODB.connection')#
DSN="DRIVER={MySQL ODBC 3.51 Driver}; Server=127.0.0.1; Database="+databasename+"; UID=root; PWD="
db.Open(DSN)
sql_up ='update xxxx where xxx'
db.Execute(sql_up)
- geoppy permet de géocoder une adresse.il faut préinstaller BeautifulSoup(download) et l implémentation python de json(web) appelé simplejson (web).Télécharger le fichier geopy (download) dans C:\PYTHON24.Aller dans c:\PYTHON24 puis lancer
C:\PYTHON24\SCRIPTS\easy_install.exe http://www.crummy.com/software/BeautifulSoup/download/BeautifulSoup.tar.gz tester avec >>> import BeautifulSoup >>>
C:\PYTHON24\SCRIPTS\easy_install.exe C:\PYTHON24\simplejson-1.5-py2.4.egg tester avec >>> import simplejson >>>
C:\PYTHON24\SCRIPTS\easy_install.exe ./geopy-0.93-py2.4.egg . tester par >>> "from geopy import geocoders >>> voir tutoriel sur geocodage (sigplus) et geopy (web).
On peut vérifier la version de python installée depuis window xp ou manifold (flash)
- D'autre module en rapport à la cartographie peuvent être installer comme
ajouter ou supprimer des programmes
python et logiciel tiers
python et serveur web
geodjango os
- Quelques articles discutent des problèmes rencontrés en utilisant python coté serveur (web).
- geodjango est codé en python mais des test avec ironpyhton fonctionne
- geodjango s utilise au sein de apache avec mod_pyhton ou directement depuis un répertoire window
- py peut contenir un code python ou ironpython !!
geodjango mod_python apache
>>> import mod_python >>> mod_python.version ( appear since 3.2 mod_python version) '3.2.10'
explication ici
- si apache 2.0 => mod_pyhton 3.0
- si apache 1.3 2.0 => mod_pyhton 3.0
- si apache 2.2 => mod_pyhton 3.2.10
le répertoire apache est le repertoire contenant le repertoire de nom module !!
pour easyphp C:\Program Files\EasyPHP 2.0b\apache\
Important Note for Windows users, PLEASE READ!!!
1. This script does not attempt to modify Apache configuration,
you must do it manually:
Edit C:/Program Files/EasyPHP 2.0b/apache\conf\httpd.conf,
find where other LoadModule lines are and add this:
LoadModule python_module modules/mod_python.so
2. Now test your installation using the instructions at this link:
http://www.modpython.org/live/current/doc-html/inst-testing.html
suivre ici pour la configuration d apache
apache.conf:
LoadModule python_module modules/mod_python.so
PythonOption mod_python.mutex_locks 8
<Directory C:/Python24/monsite/>
AddHandler mod_python .py
PythonHandler mptest
PythonDebug On
</Directory>
python et Zope
- La dernière version 3.3 de zope (download) ou la surcouche plone (download) compatible Zope 2.9 (download) et Python 2.4.
- Certaines version de zope n'installe pas python .Dans ce cas zope propose d'installer des packages dans les différentes version de python installée.
- L'instalation de Zope installait python et zope dans un répertoire différent de python.Dans les versions plus récentes, zope s'installe comme un module à python dans le répertoire C:\Python24\Lib\site-packages\zope. Cette facon de faire simplifie l'installation de python et des ses modules.
- L'installation de zope n'installe pas le serveur, il permet seulement d'avoir accès aux modules permettant de créer le serveur (instance).Le module essentiel a pour nom C:\Python24\Lib\site-packages\zope\app\server\mkzopeinstance.
- Zope n'a pas accès à mysql depuis la ZMI (IDE en html/javascript) , il faut installer un pont entre zope et python .
- Les modules pour zope sont appelé des packages et existent seulement sous forme de fichiers archives.Ces fichiers sont a détarer dans le répertoire de Zope (C:\Program Files\zope\2.9.6\Zope\lib\python\Products ) ou des instance de zope.Le fichier a pour nom ZMySQLDA-*.tar.gz.Ainsi l acces a mysql se fait par
mysql--(odbcdriver) -->Xp--(Myodbc)-->python--(mysqlDA)-->zope
- Installer des product entraine lors du nouveau lancement de zope la compilation de fichier dans le nouveau répertoire ( chaque fichier py cré un fichier pyc ).
- les scripts créés dans la ZMI de zope peut avoir accès à l 'API de manifold en utilisant les "internals methods" avec win32all.
| a installer | DISUTILS | OS | module python | package zope | |
| zope (3.3.1) | 2.4.1 | néc python 2.4.4 python (2.4.4)(download) pywin(web) | odbc (web) modules (web) | mysqql (web) | mysqlDA |
- mysqlDA s'installe dans c:\Python24\zopeskel\src et se configure dans c:\Python24\zopeskel\etc\mysqldbda-configure.zcml ou se trouve <include package='mysqldbda' />
- pywin pywin32 (210), disutil 2.5.0 a besoin de python 2.4.4 et installe
C:\windows\system32\pythoncom24.dll et pywintypes24.dll C:\Python24\Lib\site-packages\win32com\gen_py
python et manifold
- Tous les versions python fonctionnent ansi que les interfaces graphiques gtk et autre si celles ci sont installées.
- Si plusieurs versions python installés,Manifold comme xp n'active qu'une des versions installées.La version active est celle qui s éxecute sous xp en lancant Démarrer|executer|python. Cette version nécessite l'installation du package pywin qui install pyhtoncomxx.dll et pywintypesxx.dll dans C:\Pythonxx\Lib\site-packages\pywin32_system32\. xx est la version de python et peut être égale à 24.
- manifold propose par défaut lors du choix du langage utilisé un script implémentant le célèbre script hello,Word!.Python peut ête utilisé coté client et serveur .
python client
Celui ci ne fait pas appel aux modules qui doivent être initialisées au début du script. Au lieu d'utiliser un module de géocodage de manifold ; on va utiliser le module geopy dont l'installation a été décrite plus haut puis montrer l utilisation de l'api manifold. Des examples de script en vbscript existent ( sigplus).
default
- Ce script est celui proposé par defaut lors de la création d'un nouveau script.
def Main():
Application.MessageBox("Hello, World!", "Script")
module interne
- Python propose par defaut des modules qui sont préinstallés contrairement aux drivers d'acces aux base dedonnées comme mysql,MSSQL dont l'installation est détaillé ci dessus.L'exemple ci dessous montre comment appelé la fonction floor du module math(doc).
import math def Main(): Application.MessageBox(str(math.floor(2.132)), "Script")
module python geopy
- Le module python geopy peut etre appelé depuis manifold pour géocoder une adresse.
from geopy import geocoders
def Main():
ve = geocoders.VirtualEarth()
place, (lat, lng) = ve.geocode("Microsoft HQ in Redmond, WA")
Application.MessageBox(place+" "+str(lat)+" "+str(lng), "Script")
python et usermanual 7x
- chaque variable du script est un lien vers la documentation pour montrer deux objets principaux: drawing geom et liste d'objets (xxSet).
- Le modèle objet de manifold se trouve au format png.
def Main(): Application.MessageBox("Hello, World!", "Script") comps=Application.ActiveDocument.componentSet("POINT") Application.MessageBox(comps.TypeName,"Drawing") i=0 g=comps.objectSet.Item(i).Geom Application.MessageBox(g.ToTextWKT(),"t")#Point Type bs=g.BranchSet ps=bs.Item(0).PointSet poi=ps.Item(0) #changement de la valeur du point poi.X=710000.704998007 # lon 1.6277 poi.Y=2600000.12576877 # lat 50.4844 #ajout d'un nouveau point test=Application.NewPoint() test.X=770000 test.Y=2660000 comps.ObjectSet.Add(Application.NewGeom(0,test))
script SQL
- L'écriture de requête SQL dans python doit se faire de cette facon pour éviter une erreur d'éxecution du à la présence de guillement dans la variable
var="l'h" ok ....SQL='select * from table where var="'+val+'"'=>select * from table where var="l'h" pas ok SQL="select * from table where var='"+val+"'"=>select * from table where var='l'h'
python ligne de commande=
from win32com.client import Dispatch
manifold=Dispatch('Manifold.Application')
document=manifold.ActiveDocument
document.Open("C:\\test.map", False, False")
query=document.NewQuery('testquery')
query.Text='SELECT * FROM [Nord Drawing]'
table=query.Run()






