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 <almar.klein@gmail.com> 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'