Script Python
Un article de WikiSigPlus.
voir Ironpython application, C#application
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 |
shell python
- 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)
- python évolue mais pas les modules s'endoute faut il avoir plusieurs v ersions et modules python installé en même temps et changer les variables d'environnement pour prendre en compte la version a utiliser .
C:\python24 C:\python25 voir ce lien pour connaitre version compatible python + module scientifique C:\python27
modules python (alphabétique) ( voir aussi postgis
| modules | python 2.3 | python 2.4 | python 2.5 [1] | python 2.6 [2] | commentaires | |
| ctype | 1.0.2 | include | ||||
| Django (web) | 1.0 tar | |||||
| GeoDjango 1.0doc (web) | minimun need ctype lib | recommanded | ||||
| 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] | import psycopg ou psycopg2 | |||||
| pywin32(web) | 212 | 212 | 212 | 212 | ||
| septutools | 0.6c1 zip | |||||
| simplejson (web) | tar 1.4] | |||||
| geopy(web) | 0.93 egg | 0.93egg | 0.93egg | non rien | ||
| zope (web) | (2.8.8) | 2.11.1 exe | ||||
| PCL (web) | 0.10.0 zip | Python cartographic Library | ||||
| MySQL-python | (1.2.2 | 1.2.2) | non rien !(utiliser win32) | import MySQLdb | ||
| Scipy (web) | 0.6.0 | 0.6.0 | 0.6.0 | non rien | ||
| netbeans (web) | ok | |||||
| QT ([ web]) | rien | Eric3snapshot2005-04-10 PyQtGPL10.exe | rien | lire QT |
connaitre les versions
il existe un script qui permet de voir ce qui est installer [3] voir test_version ici un exemple
environnement python
Il faut installer l'environnement python pour utiliser le compilateur et la machine python . Après téléchargement sur le site (web du logiciel dans sa version 2.4.4; on le lance en allant dans Démarrer|Executer|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
.
- 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
COM et python
Microsoft propose des outils de nom aximp.exe et tlbimp.exe qui permet de générer a partir d'assembly les dll utilisable par pyhton après intallation du module win32all et chargement des dll dans le GAC, dans le répetoire de stockage des assemnlies de PythonNEt ou accessible dans PYTHONPATH.
- pywin32 ( anciennement win32all )wiki,download 4.2Mo).Tester avec la commande "import win32com".
>>> import win32com
Ce script permet d'appeler des dll natif a microsoft.
shell python et manifold
Le problème est que l'accès a Manifold depuis l'extérieur est limité car
- l'acces http nécessite un serveur web qui ne peut être que IIS ( on attend mono-xsp et ironpython-django )
- ui scripting n'est pas utilisable par shell python et serveur web
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()
python et serveur web
un serveur web peut être lancer depuis django sans serveur web ou avec le serveur web apache grace a mod_python.
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 !!
enregistrer une class dans mysql
créer le repertoire racine ou le projet de nom djangos -django-admin.py startproject djangos aller dans djangos et créer une application de nom pole -python manage.py startapp pole editer djangos/polls/models.py
from django.db import models
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice = models.CharField(max_length=200)
votes = models.IntegerField()
ajouter l application au porjet en editant django/setting.py
ADMINS = (
# ('root', 'autre'),
)
MANAGERS = ADMINS
DATABASE_ENGINE = 'mysql' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = 'django' # Or path to database file if using sqlite3.
DATABASE_USER = 'root' # Not used with sqlite3.
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.polls'
)
voir le SQL sans l executer dans mysql
-python manage.py sql polls
executer la requête SQL dans mysql
-python manage.py syncdb
regarder comment est stocker les classes dans mysql . mysql joue le rôle de zodb de zope !!
tester shell et web
- pour tester le web
lancer le serveur web python -python manage.py runserver lancer firefox ert aller sur -[http://127.0.0.1:8000/]
- pour tester e nmode shell
python manage.py shell voir ici
appliquer les changements
a chaque modification de setting.py urls.py il faut relancer manage.py
- ajouter dans mysite/settings.py a l interieur de INSTALLED_APPS la ligne 'django.contrib.admin'
- décommenter dans mysite/urls.py 1-from django.contrib import admin et 2 admin.autodiscover()
- lancer python manage.py syncdb pour mettre a jour mysql
- n'oublier pas que mysite/settings.py doit contenir
ROOT_URLCONF = 'mysite.urls'
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 la configuration et le principe des répertoires d' apache
apache.conf:
LoadModule python_module "C:/Program Files/EasyPHP 2.0b/apache/modules/mod_python.so"
Alias /monsiteapache "C:/Program Files/EasyPHP 2.0b/www/monsiteapache"
<Directory "C:/Program Files/EasyPHP 2.0b/www/monsiteapache">
#Options Indexes FollowSymLinks
AddHandler mod_python .py
#AddHandler python-program .py
PythonHandler mptest
PythonDebug On
</Directory>
déposer ce fichier C:\Program Files\EasyPHP 2.0b\www\monsiteapache\mptest.py contenant
from mod_python import apache
def handler(req):
req.content_type = 'text/plain'
req.write("Hello World!")
return apache.OK
aller sur le site http://127.0.0.1/monsiteapache/mptest.py
geodjango
vérifier que tout fonctionne ici
On va ajouter le projet test_geodjango et dedans l' application testapp. ( sont des nom de repertoires)
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
logiciel compatible python
eclipse pydev
C'est un projet libre dont la licence fonctionne sur une licence annuelle ou bi-annuelle comme manifold gis système [4]
La mise à jour se fait en utilisant l'update manager: http://www.fabioz.com/pydev/updates
netbeans 6.5
netbeans version 6.5 utilise en interne une version python pour fonctionner et supporte plusieurs langage python . etant gratuit , on va privilègier sont utilisatin sur de solutions libres.Il nécessite d'installer java .
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 .
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'








