[Dcmlib] gdcmPython + install
Eric Boix
Eric.Boix at creatis.insa-lyon.fr
Mon May 3 09:36:22 CEST 2004
Salut Mathieu,
Quoting Mathieu Malaterre <mathieu.malaterre at kitware.com>:
> J'ai un peu regarder le wrapping python dans gdcm, mais je dois avouer que
> j'ai pas tout compris.
Faut dire que c'est un peu chaud: entre swig, les wrappers vtk, la
couche des autotools, la dependance aux fichiers Dicts, un layout
different avant et apres install, et LA COMPATIBILITE' AVEC SETUP.PY,
l'equation est pas simple a resoudre...
> Est-ce que quelqu'un peut me resumer les taches a faire ?
Y'a pas mal d'info dans DEVELOPPERS a la section "Python related section".
Je te fais la version courte ci-dessous.
> Pour l'instant les CMakeLists genere deux libs:
> swig: libpygdcm.so (+gdcm.py)
> vtk : libvtkgdcmPython
Si uniquement --enable-python, alors libpygdcm.so doit etre genere', mais
sous le nom _gdcm.so (si possible). Les autotools ne permettaient pas
de generer une lib avec un nom prefixe' par _ (underscoe) et il fallait
donc le renommer a l'install (et faire le lien symbolique ad-hoc durant
la phase de developpement quand on travaille dans la hierarchie cvs).
Si --enable-python et --enable-vtk alors il faut engendrer vtkgdcmPython.so
en plus.
Attention: il faut que le nom de la fonction d'init matche le nom de la
librairie pour que python retrouvre ses petit (la commande
"nm vtkgdcmPython.so | grep -i init", est ici utile).
> Le fichier gdcm.py est generer automatiquement par swig et va essayer de
> chercher la librarie _gdcm (c'est le init_machin).
Exact. Et _gdcm est _gdcm.so que l'on doit generer.
En resume':
gdcmPython/__init__.py (ecrit a la main) importe gdcm.py (genere par swig)
gdcm.py importe _gdcm.so (genere par cmake ou autotools)
gdcm.py importe vtkgdcmPython.so (genere par cmake ou autotools).
> Donc quelques questions:
> 1. A quoi servent: WrapSWIG.py, WrapVTK.py, distutilsWrapping.py,
> gdcmVersiom.py (surtout pourquoi ils sont au toplevel ?)
WrapSWIG.py, WrapVTK.py sont des specialisations de distutilsWrapping.py
qui permettent de lancer les wrappers ad-hoc dans le cas ou l'on wrappe
respectivement avec Swig ou avec les wrappers de vtk. gdcmVersiom.py
sert a preciser le numero de version avant le packaging. Tout cela sert a
ecrire elegament le setup.py.
Remarque: ces fichiers se trouvent a la racine de gdcm et non dans
gdcmPython, car nous ne savons pas faire autrement avec setup.py, sans
compliquer radicalement les choses (au point de rendre la lecture de
setup.py illisible, en particulier la partie d'exploration des fichiers
a compiler, qui se trouveraient alors dans ../src au lieu de src/: ceci
pose un probleme pratiquement insolvable quand on compile gdcm avec
setup.py depuis un package de sources lui meme engendre' avec setup.py).
> 2. Qu'est ce que vous voulez comme nom pour la lib generee par SWIG ?
_gdcm.so
> par vtkWrapPython ?
vtkgdcmPython.so
> 3. Qu'est ce que vous voulez comme arborescence dans
> /usr/lib/pythonx.x/site-packages ?
Tous les fichiers/repertoires python sources sont contenus dans
CVSGDCM/gdcmPython/:
/usr/lib/pythonx.x/site-packages/gdcmPython/__init__.py
/usr/lib/pythonx.x/site-packages/gdcmPython/gdcm.py (a generer avec Swig)
/usr/lib/pythonx.x/site-packages/gdcmPython/testSuite.py
/usr/lib/pythonx.x/site-packages/gdcmPython/demo/*.py
/usr/lib/pythonx.x/site-packages/gdcmPython/_gdcm.so (a generer avec cmake)
/usr/lib/pythonx.x/site-packages/gdcmPython/vtkgdcmPython.so (" avec cmake).
Remarque: setup.py place par defaut les libs non pas dans
/usr/lib/pythonx.x/site-packages/gdcmPython/
mais dans
/usr/lib/pythonx.x/site-packages/
ce qui est moins clair, mais fonctionne quand meme...
Ca va ?
Frog.
More information about the Dcmlib
mailing list