Script Python

Un article de WikiSigPlus.

(Différences entre les versions)
Jump to: navigation, search
Version du 16 novembre 2008 à 17:30
Liofr (Discuter | contribs)
(geodjango mod_python apache)
← Différence précédente
Version du 16 novembre 2008 à 17:32
Liofr (Discuter | contribs)
(geodjango mod_python apache)
Différence suivante →
Ligne 184: Ligne 184:
http://www.modpython.org/live/current/doc-html/inst-testing.html http://www.modpython.org/live/current/doc-html/inst-testing.html
-suivre [http://www.modpython.org/live/current/doc-html/inst-apacheconfig.html ici] pour la configuration d apache+suivre la [http://www.modpython.org/live/current/doc-html/inst-apacheconfig.html configuration] et le principe des [http://johnbokma.com/windows/apache-virtual-hosts-xp.html répertoires] d' apache
apache.conf: apache.conf:

Version du 16 novembre 2008 à 17:32

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.3python 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.00.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).

Image:Manifold_mysql_python.jpg

>>> 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
>>> 

Image:BeautifulSoup_install0.png

C:\PYTHON24\SCRIPTS\easy_install.exe  C:\PYTHON24\simplejson-1.5-py2.4.egg
tester avec 
>>> import simplejson
>>> 

Image:simplejson_install0.png

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).

Image:geopy_install0.png

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

Image:Manifold_python0.jpg

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

Image:mod_pyhton_installpath.jpg 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 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.

Image:Manifold_python0.png manifold avec python 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()