Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Building from Source on Windows 32 bit and 64 bit
Clone this wiki locally
This is the start of an unofficial guide to building Python packages on Windows. For now, it is one man's experience, in progress. With input from others, I hope it will grow into a more comprehensive guide.
Optional: Install Windows on a Virtual Machine
By installing Windows on virtual machines, you can work from one computer, switch between 32-bit and 64-bit Windows, and easily roll back to a fresh installation of Windows if needed. This is a good way to operate.
Make disk images from installation DVDs for 32-bit and 64-bit Windows 7.
dd if=/dev/disk1 -of=disk_image.iso
Download VirtualBoxVM, Oracle's software to hosting virtual machines, and start two virtual machines from the two disk images. Activate their licenses, and then save a snapshot of the fresh installation.
Install Visual Studio
We must* use the 2008 release of Visual Studio to compile packages compatible with Python 2.7. We can still obtain the installer officially from Microsoft at http://go.microsoft.com/?linkid=7729279. When prompted to select optional components, you can uncheck the large Microsoft SQL Server package, which generally should not be necessary for our purposes. The installation process is straightforward.
Note: if you need to compile Fortran extensions as well, make sure your chosen Fortran compiler supports the "Express" versions of Visual Studio. For example, the Intel Fortran compilers only support the "full" versions of Visual Studio 2008, 2010, or 2012 (depending on the version).
The easiest way to get Python is via Anaconda.
At this stage, on 32-bit Windows, some standard python installations (
python setup.py install) and conda recipes (
conda build ...) work as expected. Packages with pure C or Cython extensions should compile successfully.
Some packages have idiosyncracies, especially those that link to external libraries. The purpose of this wiki page will be to collect advice for handling difficult cases.
Note: For Python 3, use Visual Studio 2010 instead of 2008. (I have not tested this personally.)
Additional Steps for 64-bit Windows
These instructions are gleaned from a README tucked away in the vpython-wx project. I summarize them here in the hope of making them easier to discover and easier to revise.*
Install Windows 7 SDK
Install Windows SDK for Windows 7 and .NET Framework 3.5 SP1 using the installer from http://www.microsoft.com/en-us/download/details.aspx?id=3138. You must right-click and "Run As Administrator" or the installation will fail. The full package is a 2.5 GB download. Without the documentation or samples, it's a 422 MB download. Expect a long wait.
Configure Visual Studio 2008 to use Windows 7 SDK
Follow these instructions to configure Visual Studio 2008 to use the Windows 7 SDK. The gist is:
- Go to Start > All Programs > Microsoft Windows SDK v7.0 > Visual Studio Registration > Windows SDK Configuration Tool
- Select Windows 7 SDK (v7.0) the default instead of v6.0.
This will update the Windows 7 SDK build environment and the Visual Studio 2008 IDE build environment to use the Windows 7 SDK headers, libraries and tools. You can also use this tool to switch it back again.
Revisions to Official Instructions
Apparently, the official instructions for Visual Studio 2008 are not fully compatible with Visual Studio 2008 Express. A blog post explains the problems and how to fix them. At the end, a script is provided to execute to the procedure and, according to the vpython README linked above, it works.
An Important Fix
Open Visual C++ 2008 (Express Edition). Under Tools > Options > Projects and Solutions > VC++ Directories you can see what resources are invoked for Platform x64. You should see
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC.
In this VC folder there is a major error in the file
vcvarsall.bat. These lines
:x86_amd64 if not exist "%~dp0bin\x86_amd64\vcvarsx86_amd64.bat" goto missing call "%~dp0bin\x86_amd64\vcvarsx86_amd64.bat"
must changed to
:x86_amd64 if not exist "%~dp0bin\vcvarsx86_amd64.bat" goto missing call "%~dp0bin\vcvarsx86_amd64.bat"