[Distutils] Compiling Cython on Windows runs into link problems because of directories containing spaces

Almar Klein almar.klein at gmail.com
Sun Jan 8 23:10:49 CET 2012


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 at 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'
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/distutils-sig/attachments/20120108/b7727bd3/attachment-0001.html>


More information about the Distutils-SIG mailing list