PyML
Installation avec python 2.4
> cd src/PyML-0.6.15 > python setup.py build
lorsqu'on a cette erreur:
> python setup.py build running build running build_py running build_ext building 'PyML/ext/_libsvm' extension C compiler: /usr/lib/python2.4/pycc -DNDEBUG compile options: '-I/usr/include/python2.4 -c' pycc: PyML/ext/libsvm.cpp cc: No input file specified, no output generated cc: No input file specified, no output generated error: Command "/usr/lib/python2.4/pycc -DNDEBUG -I/usr/include/python2.4 -c PyML/ext/libsvm.cpp -o build/temp.solaris-2.10-i86pc-2.4/PyML/ext/libsvm.o" failed with exit status 1
c'est parce qu'il utilise pycc au lieu de pyCC!
> /usr/lib/python2.4/pyCC -DNDEBUG -I/usr/include/python2.4 -c PyML/ext/libsvm_wrap.cpp -o build/temp.solaris-2.10-i86pc-2.4/PyML/ext/libsvm_wrap.o
il faut aller voir dans les distutils de pynum pour comprendre ce qui se passe?!
Installation avec python 2.5
> cd src/PyML-0.6.15 > /opt/csw/bin/python setup.py build
lorsqu'on a cette erreur:
> python setup.py build running build running build_py running build_ext building 'PyML/ext/_libsvm' extension C compiler: /usr/lib/python2.4/pycc -DNDEBUG compile options: '-I/usr/include/python2.4 -c' pycc: PyML/ext/libsvm.cpp cc: No input file specified, no output generated cc: No input file specified, no output generated error: Command "/usr/lib/python2.4/pycc -DNDEBUG -I/usr/include/python2.4 -c PyML/ext/libsvm.cpp -o build/temp.solaris-2.10-i86pc-2.4/PyML/ext/libsvm.o" failed with exit status 1
c'est parce qu'il utilise pycc au lieu de pyCC!
> /usr/lib/python2.4/pyCC -DNDEBUG -I/usr/include/python2.4 -c PyML/ext/libsvm_wrap.cpp -o build/temp.solaris-2.10-i86pc-2.4/PyML/ext/libsvm_wrap.o
il faut aller voir dans les distutils de pynum pour comprendre ce qui se passe?!
PyML -0.6.15 ne compile pas sous Solaris 10 avec la commande classique:
python setup build creating build/temp.solaris-2.10-i86pc-2.5 creating build/temp.solaris-2.10-i86pc-2.5/PyML creating build/temp.solaris-2.10-i86pc-2.5/PyML/ext compile options: '-I/opt/csw/include/python2.5 -c' cc: PyML/ext/libsvm_wrap.cpp cc: No input file specified, no output generated cc: No input file specified, no output generated error: Command "cc -DNDEBUG -xO3 -xtarget=generic -xarch=generic -I/opt/csw/include/python2.5 -c PyML/ext/libsvm_wrap.cpp -o build/temp.solaris-2.10-i86pc-2.5/PyML/ext/libsvm_wrap.o" failed with exit status 1
Le problème n'est pas lié à Python, mais plutôt aux distutils.
Le développeur du module m'a envoyé un fichier Makefile qui n'est pas à jour. J'ai donc installé PyML sur une debian, et relevé les lignes de compilation, pour les utiliser sur le serveur solaris.
- il faut faire des modifications
- que ce soit avec gcc3 ou gcc4.0.2, ça ne passe pas.
Par exemple, avec gcc4.1.2 sur debian, l'erreur consistant à ne pas déclarer une variable n'est pas détectée! On peut faire la modif suivante dans le fichier PyML/ext/FeatureVector.cpp, en commentant la ligne
//cout << "index: " << index << endl;
Par contre, pour cette erreur:
ld: fatal: relocation error: file: build/temp.solaris-x86-2.4/PyML/ext/SparseDataSet.o section: .rel.debug_info symbol: : symbol has been discarded with discarded section: .gnu.linkonce.t._ZSt6fill_nIPijiET_S1_T0_RKT1_ collect2: ld returned 1 exit status ld: fatal: relocation error: file: build/temp.solaris-x86-2.4/PyML/ext/VectorDataSet.o section: .rel.debug_info symbol: : symbol has been discarded with discarded section: .gnu.linkonce.t._ZSt6fill_nIPijiET_S1_T0_RKT1_ collect2: ld returned 1 exit status
peut etre lié à ce probleme
hack dans le script setup.py
trouvé par N. Ollinger, permet d'avancer dans la compilation, mais maintenant, c'est un flag à l'édition de liens qui manque. De plus, il a fallu modifier un fichier à cause de hash_map
> python setup.py build --debug running build running build_py running build_ext building 'PyML/ext/_mylibsvm' extension C compiler: /usr/lib/python2.4/pyCC compile options: '-g -I/usr/include/python2.4 -c' pyCC: PyML/ext/mylibsvm_wrap.cpp "PyML/ext/SparseDataSet.h", line 14: Error: Could not open include file<hash_map>. "PyML/ext/SparseDataSet.h", line 27: Error: hash_map is not a member of std. "PyML/ext/SparseDataSet.h", line 44: Error: A class template name was expected instead of hash_map. 3 Error(s) detected. "PyML/ext/SparseDataSet.h", line 14: Error: Could not open include file<hash_map>. "PyML/ext/SparseDataSet.h", line 27: Error: hash_map is not a member of std. "PyML/ext/SparseDataSet.h", line 44: Error: A class template name was expected instead of hash_map. 3 Error(s) detected. error: Command "/usr/lib/python2.4/pyCC -g -I/usr/include/python2.4 -c PyML/ext/mylibsvm_wrap.cpp -o build/temp.solaris-2.10-i86pc-2.4/PyML/ext/mylibsvm_wrap.o" failed with exit status 3
Pour hash_map, il faut linker avec “-library=stlport4”, mais impossible de lui faire rajouter cet argument!?
Si on le fait manuellement, on arrive a compiler et installer pyml:
> cp -rp PyML-0.6.15/setup.py PyML-0.6.15/setup.py.ori > cd PyML-0.6.15/PyML/ext/ > cp -rp SMO.h SMO.h.ori > cp -rp Gist.h Gist.h.ori > cp -rp KernelCache.h KernelCache.h.ori > cp -rp SparseDataSet.h SparseDataSet.h.ori > cp -rp PyML/ext/FeatureVector.cpp PyML/ext/FeatureVector.cpp.ori > cp PyML-0.6.15.old/setup.py PyML-0.6.15/ > cp PyML-0.6.15.old/PyML/ext/SMO.h PyML-0.6.15/PyML/ext/ > cp PyML-0.6.15.old/PyML/ext/Gist.h PyML-0.6.15/PyML/ext/ > cp PyML-0.6.15.old/PyML/ext/KernelCache.h PyML-0.6.15/PyML/ext/ > cp PyML-0.6.15.old/PyML/ext/SparseDataSet.h PyML-0.6.15/PyML/ext/
pour tester:
> cd data/ > pwd /local/apps/src/PyML-0.6.15 > python Python 2.4.4 (#1, Jan 9 2007, 23:31:33) [C] on sunos5 Type "help", "copyright", "credits" or "license" for more information. >>> from PyML import * Traceback (most recent call last): File "<stdin>", line 1, in ? File "/local/apps/lib/lib/python2.4/site-packages/PyML/datafunc.py", line 2, in ? import arrayWrap File "/local/apps/lib/lib/python2.4/site-packages/PyML/arrayWrap.py", line 2, in ? from ext import csparsedataset File "/local/apps/lib/lib/python2.4/site-packages/PyML/ext/csparsedataset.py", line 7, in ? import _csparsedataset ImportError: ld.so.1: python2.4: fatal: relocation error: file /local/apps/lib/lib/python2.4/site-packages/PyML/ext/_csparsedataset.so: symbol __1cDstd2l6Frn0ANbasic_ostream4Ccn0ALchar_traits4Cc____pkc_2_: referenced symbol not found
s'agit il d'un problème de compatibilité entre librairies?. On vérifie que les patches sont tous appliqués sur nemo, et on se reporte à la faq de sun studio.
Il faudrait vérifier que la compilation du .so est correcte:
CC -G -features=extensions -compat=5 -library=iostream build/temp.solaris-2.10-i86pc-2.4/PyML/ext/SparseDataSet_wrap.o build/temp.solaris-2.10-i86pc-2.4/PyML/ext/SparseDataSet.o build/temp.solaris-2.10-i86pc-2.4/PyML/ext/DataSet.o build/temp.solaris-2.10-i86pc-2.4/PyML/ext/SparseFeatureVector.o build/temp.solaris-2.10-i86pc-2.4/PyML/ext/Kernel.o -o build/lib.solaris-2.10-i86pc-2.4/PyML/ext/_csparsedataset.so
mais aussi que les objets ont bien été compilés avec stlport4?