samedi, février 14, 2009, 02:59 PM - Informatique
Certains modules python contiennent des parties écrites en C.Si on tente d'installer ces modules par la commande traditionnelle:
C:\...\Readline-1.7>c:\Python25\python.exe setup.py install
On peut heurter aux message suivant (que j'ai eu en essayant d'installer readline):
running install
running build
running build_py
creating build
creating build\lib.win32-2.5
copying readline.py -> build\lib.win32-2.5
running build_ext
error: Python was built with Visual Studio 2003;
extensions must be built with a compiler than can generate compatible binaries.
Visual Studio 2003 was not found on this system. If you have Cygwin installed,
you can try compiling with MingW32, by passing "-c mingw32" to setup.py.
Le message d'erreur n'est pas très clair mais il indique qu'il faudrait disposer de mingw32 pour pouvoir régler le problème. Je m'en suis rendu compte en lisant cet article qui lui même disait s'être inspiré de cet article.
En substance, il faut, pour pouvoir compiler des modules python contenant du C:
- Télécharger Mingw et installer g++ et Makefile.
- Créer le fichier
%PYTHONHOME%\lib\distutils\distutils.cfg avec le contenu :[build]
compiler = mingw32
- Editer le fichier
%PYTHONHOME%\lib\distutils\version.py pour remplacer l'affectation de version_re par: version_re = re.compile(r'^(\d+) \. (\d+) (\. (\d+))? (\. (\d+))? ([ab](\d+))?$',re.VERBOSE)A l'endroit où se trouve le module à construire, créer un fichier configure.bat pour renseigner les variables d'environnement qui seront utiles à MINGW, avec le contenu suivant:
@echo off
echo MinGW Enviroment Command Console
echo ....
echo ....
@set MINGWROOT=C:\MinGW
@set MINGWBIN=%MINGWROOT%\bin
@set MINGWINCLUDE=%MINGWROOT%\include
@set MINGWLIB=%MINGWROOT%\lib
@set MINGWLIBEXEC=%MINGWROOT%\libexec\gcc\mingw32\3.4.5
@set MINGWBIN2=%MINGWROOT%\mingw32\bin
@set MINGWLIB2=%MINGWROOT%\mingw32\lib\ldscripts
@set MINGW=%MINGWROOT%;%MINGWBIN%;%MINGWINCLUDE%;%MINGWLIB%;%MINGWLIBEXEC%;%MINGWLIB2%;%MINGWLIB2%
rem to add more resource paths just use the set command like above and the and it to the set PATH like below
@set Path=%MINGW%;%Path%
Avant de relancer la commande d'installation, il suffit de lancer le script créé au dessus:
C:\...\Readline-1.7>configure.bat
MinGW Enviroment Command Console
....
....pour pouvoir lancer la construction du module à installer:
C:\...\Readline-1.7>c:\Python25\python.exe setup.py build
running build
running build_py
creating build
creating build\lib.win32-2.5
copying readline.py -> build\lib.win32-2.5
running build_ext
building '_rlsetup' extension
creating build\temp.win32-2.5
creating build\temp.win32-2.5\Release
C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall -Ic:\Python25\include -Ic:\Pytho
n25\PC -c _rlsetup.c -o build\temp.win32-2.5\Release\_rlsetup.o
_rlsetup.c: In function `rl_function':
_rlsetup.c:46: warning: 'p' might be used uninitialized in this function
writing build\temp.win32-2.5\Release\_rlsetup.def
C:\MinGW\bin\gcc.exe -mno-cygwin -shared -s build\temp.win32-2.5\Release\_rlsetu
p.o build\temp.win32-2.5\Release\_rlsetup.def -Lc:\Python25\libs -Lc:\Python25\P
CBuild -lpython25 -lmsvcr71 -o build\lib.win32-2.5\_rlsetup.pyd
avant de l'installer effectivement:
C:\...\Readline-1.7>c:\python25\python.exe python setup.py install
running install
running build
running build_py
running build_ext
running install_lib
copying build\lib.win32-2.5\_rlsetup.pyd -> c:\Python25\Lib\site-packages
byte-compiling c:\Python25\Lib\site-packages\readline.py to readline.pyc
running install_egg_info
Removing c:\Python25\Lib\site-packages\Readline-1.7-py2.5.egg-info
Writing c:\Python25\Lib\site-packages\Readline-1.7-py2.5.egg-info




( 3 / 542 )

Calendrier



