Since there've been no responses yet, let me make my question more clear :)
Is this is a bug, or is this a known "feature" that I should solve in another manner. If this is a bug, can someone help me fix it? Further, I'm a bit surprised to find this bug. I can't be the only one who wants to compile stuff with the MS compiler and who has Python installed in his "program files". Why is that? Regards, Almar On 5 January 2012 11:49, Almar Klein <[email protected]> wrote: > Hi, > > I have a problem with compiling Cython code on Windows. I think this is a > bug in distutils which is easy to solve. I have reproduced this on Python > 2.6 and Python 3.2 (32 bit). > > The problem occurs with the native msvc compiler. Using gcc works fine. > And I prefer using gcc, but sometimes you just need msvc :/ > > The problem is that the command to link the libraries does not put double > quotes around paths that have spaces in them. Unfortunately, the path where > many users have Python installed have spaces in it (e.g. c:/program > files/python26). Small example: */LIBPATH:C:\Program Files > (x86)\python32\libs*. Oh, and the include_dirs DO have double quotes > around them. > > The problem is easily solved (I confirmed this) by changing > msvc9compiler.py and msvccompiler.py: > > def library_dir_option(self, dir): # OLD VERSION > > return "/LIBPATH:" + dir > > def library_dir_option(self, dir): # FIXED VERSION > > if ' ' in dir and not dir.startswith('"'): > > dir = '"%s"' % dir > > return "/LIBPATH:" + dir > > > ===== Below follows a minimal example ===== > > ===== test_.pyx > def foo(): > > print('hello') > > > ===== setup.py > > import os, sys > > from Cython.Distutils import build_ext > > from distutils.core import setup > > from distutils.extension import Extension > > from numpy.distutils.misc_util import get_numpy_include_dirs > > # Ugly hack so I can run setup.py in my IDE > > sys.argv = ['setup.py', 'build_ext', '--inplace'] > > # Init include dirs > > include_dirs = ['.'] > > include_dirs.extend(get_numpy_include_dirs()) > > # Creat Extensions > > ext_modules = [ > > Extension('test_', ['test_.pyx'], > > include_dirs=include_dirs, > > ), > > ] > > # Compile > > setup( > > cmdclass = {'build_ext': build_ext}, > > ext_modules = ext_modules, > > ) > > print('Successfully compiled cython file: test_') > > > ===== output when running setup.py > > running build_ext > > No module named msvccompiler in numpy.distutils; trying from distutils > > cythoning test_.pyx to test_.c > > building 'test_' extension > > C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\cl.exe /c > /nologo /Ox /MD /W3 /GS- /DNDEBUG -I. -I"C:\Program Files > (x86)\python32\lib\site-packages\numpy\core\include" -I"C:\Program Files > (x86)\python32\include" -I"C:\Program Files (x86)\python32\PC" /Tctest_.c > /Fobuild\temp.win32-3.2\Release\test_.obj > > Found executable C:\Program Files (x86)\Microsoft Visual Studio > 9.0\VC\BIN\cl.exe > > C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\link.exe /DLL > /nologo /INCREMENTAL:NO */LIBPATH:C:\Program Files (x86)\python32\libs > /LIBPATH:C:\Program Files (x86)\python32\PCbuild* /EXPORT:PyInit_test_ > build\temp.win32-3.2\Release\test_.obj > /OUT:C:\almar\projects\py\cmu1394\test_.pyd > /IMPLIB:build\temp.win32-3.2\Release\test_.lib > /MANIFESTFILE:build\temp.win32-3.2\Release\test_.pyd.manifest > > Found executable C:\Program Files (x86)\Microsoft Visual Studio > 9.0\VC\BIN\link.exe > > LINK : fatal error LNK1181: cannot open input file 'Files.obj' > > > > >
_______________________________________________ Distutils-SIG maillist - [email protected] http://mail.python.org/mailman/listinfo/distutils-sig
