[Distutils] Compiling Cython on Windows runs into link problems because of directories containing spaces
Almar Klein
almar.klein at gmail.com
Thu Jan 5 11:49:24 CET 2012
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/20120105/2be8e8c5/attachment.html>
More information about the Distutils-SIG
mailing list