classification
Title: distutils seems to only work with VC++ 2008 (9.0)
Type: enhancement Stage:
Components: Distutils, Windows Versions: Python 3.2
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: tarek Nosy List: eric.araujo, eswenson, loewis, rpetrov, tarek
Priority: normal Keywords:

Created on 2009-02-12 22:42 by eswenson, last changed 2010-11-26 02:09 by eric.araujo.

Messages (4)
msg81833 - (view) Author: Eric Swenson (eswenson) Date: 2009-02-12 22:42
Building python extensions using distutils in python 2.6 with only VC++ 
2005 installed no longer works.  

distutils appears to require VC++ 2008.  The documentation on building 
extensions for Python 2.6 seems to suggest that VC++ 2008, while 
preferred, is not required and that it should be possible to build 
extensions with VC++ 2005.

distutils appears to look for vcvarsall.bat in the VC++ 9.0 directories. 
It decides to use 9.0 based on the return value of 
distutils.msvc9compiler.find_build_version, which returns 9.0 -- 
presumably because python 2.6 was built on VC++ 9.0 (2008).  Why is does 
it no longer search for older versions of VC++ (like 2005)?  Is this a 
bug in distutils?  

If VC++ 2008 (9.0) is required to build extensions, then the python 2.6 
web site should make this clear.
msg81836 - (view) Author: Tarek Ziadé (tarek) * (Python committer) Date: 2009-02-12 23:20
distutils will use the same compiler used to build Python.

If you want to build with a previous version of MSVC, you need to 
compile Python with that particular version.

That said, MSVCCompiler could probably take new options, to force the
MSVC version and the arch.

This is in theory. Are you willing to help me build that patch ?

Some tests on your system would be appreciated.
msg81840 - (view) Author: Eric Swenson (eswenson) Date: 2009-02-13 00:02
Hi Tarek,
I have been debugging this and found the following:
If you set the DISTUTILS_USE_SDK environment variable to any value (I used
DISTUTILS_USE_SDK=1) and the MSSdk environment variable to anything (I used
MSSdk=1), and you manually run the "vcvarsall.bat" file that a VC++ user
should find in his "c:/Program Files/Visual Studio 8/VC" directory, then
easy_install/setuptools/distutils works fine for building extensions.

It would appear that if you set those environment variables, and the
"cl.exe", and "link.exe", etc. commands can be found on the path (the
vcvarsall.bat file would have done this), then distutils.MSVCompiler
(msvc9compiler) is perfectly happy to build the extension.

That said, I think it would be nice to have a means of making this more
painless.  I'm more than happy to help out.  If you have things for me to
try/test, I'll be happy to do that.  Since the compiler class is located
automatically, and I don't know much about distutils, I don't, off the top
of my head, know how to elegantly provide options to the not-yet-determined
compiler class.  (I'm sure you could point me in the right direction...)

I have a vmware VM setup with windows xp, python 2.6, and VC++ 2008 to use
for testing, so please let me know how I can best be of assistance.

Thanks. -- Eric

On Thu, Feb 12, 2009 at 3:20 PM, Tarek Ziadé <report@bugs.python.org> wrote:

>
> Tarek Ziadé <ziade.tarek@gmail.com> added the comment:
>
> distutils will use the same compiler used to build Python.
>
> If you want to build with a previous version of MSVC, you need to
> compile Python with that particular version.
>
> That said, MSVCCompiler could probably take new options, to force the
> MSVC version and the arch.
>
> This is in theory. Are you willing to help me build that patch ?
>
> Some tests on your system would be appreciated.
>
> ----------
> priority:  -> normal
> type:  -> feature request
> versions: +Python 2.7, Python 3.1 -Python 2.6
>
> _______________________________________
> Python tracker <report@bugs.python.org>
> <http://bugs.python.org/issue5235>
> _______________________________________
>
msg83020 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2009-03-02 15:40
Whether VC++ 2008 is required very much depends on what precisely you do
in your extension. If you use a different compiler (in particular, a
different CRT), chances are fair that the resulting extension crashes
the interpreter. Users using a different compiler must understand the
issues, and understand why it is safe to use a different CRT.

Hence, I'm not sure that simplifying switching to a different compiler
is a good thing - it will likely lead to more frustration because the
resulting binaries fail in strange ways.
History
Date User Action Args
2010-11-26 02:09:15eric.araujosetnosy: + eric.araujo
2010-11-26 02:08:16eric.araujosetfiles: - unnamed
2010-08-09 03:23:31terry.reedysetversions: + Python 3.2, - Python 3.1, Python 2.7
2009-03-02 16:53:50rpetrovsetnosy: + rpetrov
2009-03-02 15:40:44loewissetnosy: + loewis
messages: + msg83020
2009-03-01 23:44:03akitadasetcomponents: + Windows
2009-02-13 00:02:21eswensonsetfiles: + unnamed
messages: + msg81840
2009-02-12 23:20:34tareksetpriority: normal
type: enhancement
messages: + msg81836
versions: + Python 3.1, Python 2.7, - Python 2.6
2009-02-12 22:42:58eswensoncreate