Building Python 3.3.4 with Visual Studio 2013
4th revision, April 12, 2014.
A document history can be found at the very end of this page
Downloads
For the impatient:
- Python 3.3.4 32-bit build using Visual Studio 2013.1
- Sources used for Python 3.3.4 64-bit build using Visual Studio 2013.1
- Python 3.3.4 64-bit build using Visual Studio 2013.1
- Sources used for Python 3.3.4 64-bit build using Visual Studio 2013.1
Note: these builds use updated versions of OpenSSL (1.0.1g) - fix for the heartbleed issue - and SQLite (3.8.4.3), plus tons of other new goodies. Plus document revision 4 adds a new naming scheme, so as to keep the different build versions separate.
Why bother?
Python 3 on Windows is built with Visual Studio 2010 Professional. If you have an application built with Visual Studio 2013 (or any other Visual Studio version), and you have Python embedded in it, you have two problems:
- It is a very bad idea to mix different Visual C++ runtimes. See http://siomsystems.com/mixing-visual-studio-versions/ for an explanation. This means if you use the official libraries to link in Python, you are in for some nasty surprises.
- The official distribution does not contain debug libraries. For some reason I don’t fully understand the python libraries have different names for debug and release builds (rather than just be located in a different directory, as I would normally approach this). This means that you cannot easily build a working debug build of your project.
So, you need to rebuild Python with the Visual Studio version you are using. In the past (read: in Python 2.x) this process was worse, but it has definitely improved in Python 3.3. In the following post I am going to explain what you need to do.
Build Instructions
Get the sources from http://python.org/download/. At the time of this writing, Python 3.3.4 is the official release, so I will use Python-3.3.4.tar.bz2 in the following.
Extract the files. You’ll get a folder Python-3.3.4
with several subfolders for sources, headers and so on.
Go to the PCBuild
folder and open readme.txt
in an editor capable of showing unix-style newlines, i.e. ANYTHING BUT NOTEPAD. I personally am a hardcore fan of scite, which is available at http://www.scintilla.org/SciTE.html.
Read readme.txt
. No, I mean seriously: read it. In particular, let’s recap the section named Python-controlled subprojects that wrap external projects and follow slowly.
We’ll start at the top, with SQLite:
_sqlite3 Wraps SQLite 3.7.4, which is currently built by sqlite3.vcproj (see below).
Well, 3.7.4 is old – it dates back from 2010. So since we’re going to rebuild everything anyway, why not upgrade sqlite as we go along? (You might not care so much, but me being a heavy SQLite user do). If you open the project sqlite3.vcxproj
in an editor (SciTE), you’ll see that the sources are supposed to be in a directory with the variable $(sqlite3Dir)
, which in turn is kept in pyproject.props
. Once you open that in an editor, you’ll notice it defines all the dependent directories as well. Take a look at this:
<PropertyGroup Label="UserMacros">
<PyDllName>python33$(PyDebugExt)</PyDllName>
<PythonExe>$(OutDir)python$(PyDebugExt).exe</PythonExe>
<KillPythonExe>$(OutDir)kill_python$(PyDebugExt).exe</KillPythonExe>
<externalsDir>..\..</externalsDir>
<font color="#FF0000"><sqlite3Dir>$(externalsDir)\sqlite-3.7.12</sqlite3Dir></font>
<bz2Dir>$(externalsDir)\bzip2-1.0.6</bz2Dir>
<lzmaDir>$(externalsDir)\xz-5.0.3</lzmaDir>
<opensslDir>$(externalsDir)\openssl-1.0.1e</opensslDir>
<tcltkDir>$(externalsDir)\tcltk</tcltkDir>
<tcltk64Dir>$(externalsDir)\tcltk64</tcltk64Dir>
<tcltkLib>$(tcltkDir)\lib\tcl85.lib;$(tcltkDir)\lib\tk85.lib</tcltkLib>
<tcltkLibDebug>$(tcltkDir)\lib\tcl85g.lib;$(tcltkDir)\lib\tk85g.lib</tcltkLibDebug>
<tcltk64Lib>$(tcltk64Dir)\lib\tcl85.lib;$(tcltk64Dir)\lib\tk85.lib</tcltk64Lib>
<tcltk64LibDebug>$(tcltk64Dir)\lib\tcl85g.lib;$(tcltk64Dir)\lib\tk85g.lib</tcltk64LibDebug>
</PropertyGroup>
So first we’re going to update sqlite. No risk, no fun! Head over to sqlite.org and download the latest amalgamation sources; at the time of the writing these were 3.8.4.3. Extract the archive, you should have 4 files in there. Now, where to move the files: notice that ..\..
is the externals directory, which is on the same include level as Python-3.3.4
. Add a folder sqlite-3.8.4.3
and copy the amalgamation files there.
Next, you’ll also need bzip2-1.0.6
. Download the source tarball at http://www.bzip.org/downloads.html and install it in the correct directory.
Next, you’ll also need lzma
, which here comes as xz 5.0.3
. Google it, ist over at http://tukaani.org/xz/. I didn’t know the site before either, I’ll admit! The latest version seems to be 5.0.5 rather than 5.0.3: take a plunge, download it and copy it to the correct folder, but don’t forget to update $(lzmaDir)
variable as well.
Next, openssl. There is a version 1.0.1e in subversion, but 1.0.1f is current, and we want to have a current SSL, don't we? At this point, I should probably point out that I have written together specific instructions on building version 1.0.1g.
We Interrupt Your Regularly Scheduled Program to Bring You This Important Message:
The case of the missing Visual Studio 2013 command prompt
If you are using Windows 8.1 (like I do), then you have probably a bad case of missing Start Menu. Chances are you use something like "Classic Start Menu". An when you do, and you install Visual Studio 2013 - there is no command prompt. AAAAAAAAAAAAAAAAA MICROSOFT! PLEASE! I have lots of love for Microsoft, but ever so often they do something so completely brainless I am starting to pray:
DEAR LORD, GRANT ME THE ABILITY TO PUNCH PEOPLE IN THE FACE OVER STANDARD TCP/IP
At any rate, this article on MSDN explains what you need to do to get your prompt.
Carrying on:
Time to open Pcbuild.sln
. I am doing this with Visual Studio 2013, the IDE asks me whether I want to upgrade the projects: yes, I do
Open the batch build options dialog and select all 32-bit debug and release binaries. Batch build ahead!
You’ll see a ton of warnings like this:
blablabla\python-3.3.2\include\pymath.h(22): warning C4273: 'round' : inconsistent dll linkage
This is so because HAVE_ROUND
is not defined on Windows; your most simple option is to modify pymath.h
to define HAVE_ROUND
right before the #ifdef
.
After the build completes, for me I get two projects that don’t build: _msi and _lzma
Let’s look at the first one first: _msi
fails because fci.lib
cannot be found. A bit of google comes up with this: http://support.microsoft.com/kb/310618. BUT THEN YOU CANNOT DOWNLOAD IT. Duh!. More google to the rescue: http://www.pixelsplasher.com/_downloads/software/Microsoft-Cabinet-SDK/. And true to form, it does include a fci.lib
. The easiest option is to include a link to the fci.lib
to the _msi
project settings. Build it, and lo and behold: IT STILL FAILS..
You get this error code: http://stackoverflow.com/questions/14710577/error-lnk2026-module-unsafe-for-safeseh-image. The option is in _msi
project properties, Linker, Advanced, “Image Has Safe Exception Handlers: NO”. Rebuild – works. Do it for both the debug and release builds.
Note: the 64-bit build fails for FCI.LIB as well for me. I have no idea why, but it does. I haven't invested the time and energy to fix this: if you really need it, drop me a line.
One down, one left to go: lzma.h
. It turns out I should have read the website and just downloaded the pre-built windows binaries. Duh! Once you have these, you can do the build just fine – except for the SAVESH exception, but you already know how to fix that one by now.
That’s it: by now a batch-build for debug and release should work just fine.
Building an updated install
- First, you install the standard windows distribution for 3.3.
- This installer puts
python33.dll
inwindows\system32
(or inwindows\syswow64
if you’re running on 64-bit windows). You need to remove it there, because you want to create a distribution that is fully movable. - Update the binaries in
C:\python33
andC:\python33\dlls
. Note that for every .exe, .dll and .pyd, there should be two forms inPCBuild
: ablabla.dll
and ablabla_d.dll
and so on. Copy both.
Understanding the mysteries surrounding the Python Debug builds
Why Batch Building both Debug and Release targets fails
The Visual Studio solution contains both Debug and Release targets. These have separate names following the standard conventions: so for example there is a _ctypes.pyd
in Release Build,
and a _ctypes_d.pyd
in Debug Build.
This holds true for allmost all projects in the solution: except for four:
make_buildinfo.exe
. This is the one that is causing the problem, and the problem is that this project is built first to create a configuration file used in subsequent builds. And if you do batch-build, then this file is created only once, so its settings are overwritting the settings for the other projects. Solution: do a separate debug and release build, and you'll be finew9xpopen.exe
. Let me quote the documentation: " Serves as an intermediate stub Win32 console application to avoid a hanging pipe when redirecting 16-bit console based programs (including MS-DOS console based programs and batch files) on Window 95 and Windows 98.". OK, this is for Windows 95, a version that will be 20 years old soon. If you are still use the Win9x series, you don't deserve an upgraded Python build :) so I choose not to include it in the binary distribution.kill_python.exe
. This is a helper program, quote, " for killing lingering python[_d].exe processes before building, thus attempting to avoid build failures due to files being locked.". OK, this is basically the same in both debug and release builds.make_versioninfo.exe
. This file generates the resource file version number, and OK this is the same in debug and release builds, so no problems here.
Modules
The download includes the following modules - sorted alphabetically - that were more or less easy to build. Some of them are included because I use them in my professional life, some are included because they are fashionable, and some are included because people asked for them ;)
beautifulsoup 4.3.2
- beautifulsoup is another highly recommended screen scraping framework. Haven't used it myself, people made me do it...
- New in document revision 3
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- Available in both the 32-bit and the 64-bit build
boto 2.27.0
this module is not compatible with Python 3
Cheetah 2.4.4
this module is not compatible with Python 3
CherryPy 3.2.4
- CherryPy is a minimalistic python web framework
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- New in document revision 3
- I modified the install to use a plain old
cherrypy
folder rather than the.egg
folder - Available in both the 32-bit and the 64-bit build
construct 2.5.1
- construct is a declarative parser/builder for binary data. I am a sucker for parsers, so I added it, even though I am oldschool enough to write my own, most of the time
- New in document revision 3
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- Available in both the 32-bit and the 64-bit build
cssselect 0.9.1
- cssselect adds CSS selector support
- New in document revision 3
- Note: I had to do a tiny code change that I don't understand at all: I needed to remove the utf-8 encoding declaration from the header of
setup.p
. I am stupid, I know! - Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- Available in both the 32-bit and the 64-bit build
cython 0.20.1
- cython is, quote, "an optimising static compiler for both the Python programming language and the extended Cython programming language". I am currently investigating whether this makes sense to me or not: I am undecided as of yet.
- New in document revision 3
- Available in both the 32-bit and the 64-bit build
dateutil 2.2
- dateutil is, well, a date utility. Who doesn't like dates? And utilities? Whoa, I had to include it!
- New in document revision 3
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- Available in both the 32-bit and the 64-bit build
Django 1.5.1
- Django is a "web framework for perfectionists with deadlines". I normally use CherryPy, but then my web framework needs are fairly minimal :)
- New in document revision 3
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- Available in both the 32-bit and the 64-bit build
dnspython 1.11.1
- dnspython is a DNS toolkit for Python. I know, it is hard to believe with such a name!
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- New in document revision 3
- Available in both the 32-bit and the 64-bit build
flask 0.10
- flask is a microframework for Python. Don't know what it does, really, but people wanted me to add it.
- New in document revision 4
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- Available in both the 32-bit and the 64-bit build
httplib2 0.8
- httplib2 is a HTTP library, very much like the builltin httplib, with two important changes: it has a 2 at the end of the name, and it does more stuff. From this verbose description you can infer that I don't really know what it does, but people say it does whatever it does very good, so there.
- New in document revision 3
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- Available in both the 32-bit and the 64-bit build
itsdangerous 0.23
- itsdangerous adds various helpers to pass trusted data to untrusted environments and back.
- New in document revision 3
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- Available in both the 32-bit and the 64-bit build
jinja 2.7.2
- jinja is a python template engine. I am personally using Cheetah (see above), but jinja is the basis for flask, and since I am including flask, I more or less had to include jinja as well :)
- New in document revision 4
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- Available in both the 32-bit and the 64-bit build
lxml 0.20.1
- lxml is, quote, "is the most feature-rich and easy-to-use library for processing XML and HTML in the Python language." It seems to have incredible traction (the number one download on pypi) but I am ashamed to say: I haven't ever used it.
- This prooved to be a really shitty build.
- lxml is based on libxslt and libxml2.
- libxml2 uses libiconv.
- libiconv has removed support for Microsoft compilers; however, there is this page that explains how to do it
- Download the source associated with the article, rebuild libiconv, and you're good to go.
- Now, head back to libxml2.
libxml2-2.9.1\win32\Readme.txt
contains detailed build instructions for Win32. I used the following options:cscript configure.js prefix=C:\Python33\Source\libxml2-2.9.1\win32\release incdir=C:\Python33\Source\libxml2-2.9.1\win32\release\include libdir=C:\Python33\Source\libxml2-2.9.1\win32\release\lib debug=yes include=C:\Python33\Source\libiconv-1.14\include lib=C:\Python33\Source\libiconv-1.14\Release_Win32
For the 64-bit build,make that Release_X64 rather than Release_Win32, like this:cscript configure.js prefix=C:\Python33\Source\libxml2-2.9.1\win32\release incdir=C:\Python33\Source\libxml2-2.9.1\win32\release\include libdir=C:\Python33\Source\libxml2-2.9.1\win32\release\lib debug=yes include=C:\Python33\Source\libiconv-1.14\include lib=C:\Python33\Source\libiconv-1.14\Release_X64
- I had to patch two files:
nanoftp.c
needs these two defines at the top:#define SEND_ARG2_CAST #define GETHOSTBYNAME_ARG_CAST
nanohttp.c
needs this define:#define SEND_ARG2_CAST
- Run
nmake
- Run
nmake install
- libxslt uses libiconv and libxml2. I did a bit of experimenting, then I used the following build parameters:
cscript configure.js prefix=C:\Python33\Source\libxslt-1.1.28\win32\release incdir=C:\Python33\Source\libxslt-1.1.28\win32\release\include libdir=C:\Python33\Source\libxslt-1.1.28\win32\release\lib debug=yes include=C:\Python33\Source\libxml2-2.9.1\win32\release\include\libxml2;C:\Python33\Source\libiconv-1.14\include lib=C:\Python33\Source\libiconv-1.14\Release_Win32;C:\Python33\Source\libxml2-2.9.1\win32\release\lib
For the 64-bit build,make that Release_X64 rather than Release_Win32, like this:cscript configure.js prefix=C:\Python33\Source\libxslt-1.1.28\win32\release incdir=C:\Python33\Source\libxslt-1.1.28\win32\release\include libdir=C:\Python33\Source\libxslt-1.1.28\win32\release\lib debug=yes include=C:\Python33\Source\libxml2-2.9.1\win32\release\include\libxml2;C:\Python33\Source\libiconv-1.14\include lib=C:\Python33\Source\libiconv-1.14\Release_X64;C:\Python33\Source\libxml2-2.9.1\win32\release\lib
- libxml2 uses libiconv.
- lxml is based on cython (and written by the same developers), but they encourage you to disable cython when building
lxml
. Quote:So, if you want a reliable build of lxml, we suggest to a) use a source release of lxml and b) disable or uninstall Cython for the build.
- The initial build instructions failed to find
libxml2
. I had to patchsetupinfo.py
with this:_include_dirs.append(r"C:\Python27\Source\libxml2-2.9.1\win32\release\include\libxml2") _include_dirs.append(r"C:\Python27\Source\libxslt-1.1.28\win32\release\include") _include_dirs.append(r"C:\Python27\Source\libiconv-1.14\include") _library_dirs.append(r"C:\Python27\Source\libxslt-1.1.28\win32\release\lib") _library_dirs.append(r"C:\Python27\Source\libxml2-2.9.1\win32\release\lib") _library_dirs.append(r"C:\Python27\Source\libiconv-1.14\Release_Win32") _library_dirs.append(r"C:\Python27\Source\zlib-1.2.5")
- Then I finally got it to build, for both debug and release, install it: and then the selftest fails. Because the install doesn't copy
libexslt.dll
,libiconv.dll
,libxml2.dll
orlibxslt.dll
. - Aaaaaaaaaaaaaaaaaaa! Did I mention it was a shitty build?
- Available in both the 32-bit and the 64-bit build
Markdown 2.4
- Markdown is a text-to-HTML conversion tool for web writers
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- New in document revision 3
- Available in both the 32-bit and the 64-bit build
MarkupSafe 0.19
- MarkupSafe implements a XML/HTML/XHTML Markup safe string for Python
- New in document revision 3
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- Available in both the 32-bit and the 64-bit build
pillow 2.3.0
- pillow is a modern fork of PIL - which hadn't been updated in a couple of years.
- New in document revision 3:
- Support for FREETYPE2. Note that this was a bit of a hassle: the default
setup.py
did not find the freetype build 2.5.2 I had been using, so I had to fix the script a bit.
- Support for FREETYPE2. Note that this was a bit of a hassle: the default
- I modified the install to use a plain old
PIL
folder rather than the.egg
zip archive
pip 1.5.4
- pip is a tool for installing and managing Python packages.
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- document revision 4 updated the build version from 2.3.1 to 2.4.0
- I modified the install to use a plain old
pip
folder rather than the.egg
one - Available in both the 32-bit and the 64-bit build
psycopg2 2.5.2
- psycopg is "that other" PostgreSQL wrapper for Python - besides PyGreSQL.
- New in document revision 3
- It failed to build initially on Python 3, because of this:
my fix was to edit
build\lib.win32-3.3\psycopg2\_psycopg.pyd : fatal error LNK1169: one or more multiply defined symbols found
psycopg\config.h
and comment out thestatic round()
definition. - The debug build was broken:
mt.exe
was called on_psycopg.pyd
, rather than_psycopg_d.pyd
: quick and easy fix insetup.py
- Available in both the 32-bit and the 64-bit build
py2exe 0.6.9
this module is not compatible with Python 3
PyChart 1.39
- pychart is a really old one (from January 1st 2006!) but it is a great small library to create PNG charts.
- I ported it to Python3. Well ok, I ran
2to3.py
, and that was that. Oh, and a minor import fix infont.py
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- Available in both the 32-bit and the 64-bit build
pycrypto 2.6.1
- pycrypto is the python cryptography toolkit
- New in document revision 3
- Build experience (if such a thing exists) was great: it just works, and it includes proper builds for both debug and release.
- Available in both the 32-bit and the 64-bit build
pyftpdlib 1.3.0
- pyftplib is a super-fast and scalable FTP server library.
- New in document revision 3
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- I modified the install to use a plain old
pyftpdlib
folder rather than the.egg
zip archive - Available in both the 32-bit and the 64-bit build
PyGreSQL 4.1.1
this module is not compatible with Python 3
pyodbc 3.0.7
- pyodbc is a python ODBC wrapper
- New in document revision 3
- I had to patch
setup.py
: it removed--debug
from the build args, thus effectively preventing the code from ever building a debug extension. - Available in both the 32-bit and the 64-bit build
pyOpenSSL-0.13.1
***- pyOpenSSL is another Python wrapper around OpenSSL, more suitable for network communication.
- The build runs smooth by now. I didn't download a nightly build from the github repository, as those aren't documented in any way I could find.
pyserial 2.7
- pyserial is a Serial Port IO library for Python
- New in document revision 3
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
pywin32 218
- pywin32 are the world-famous Windows extensions for Python.
- Head over to sourceforge.net and download
pywin32-218.zip
, the latest source archive at the time of this writing. - Unzip it and place the sources folder relative to the Python-2.7.6 folder, as for all the other extension seen above.
- Open a "Visual Studio 2010 Command Prompt" and navigate to the build directory (e.g.
C:\Python27\Source\pywin32-218
) - Do a
python setup.py -q build
- When I do it, the build starts and then fails with
perfutil.h
missing. It turns out there are tons of files missing in the official download: for reference, I've packed all missing source files together here. - I encountered this problem:
so I did what any sensible guy would have done: I uncommented the offending code in
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE\afx.h(38) : warning C4996: 'MBCS_Support_Deprecated_In_MFC': MBCS support in MFC is deprec ated and may be removed in a future version of MFC. C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE\afx.h(33) : see declaration of 'MBCS_Support_Deprecated_In_MFC' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sal_supp.h(57) : warning C4005: '__useHeader' : macro redefinition C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\sal.h(2886) : see previous definition of '__useHeader' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\specstrings_supp.h(77) : warning C4005: '__on_failure' : macro redefinition C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\sal.h(2896) : see previous definition of '__on_failure' C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE\atlcore.h(630) : error C2039: 'SetDefaultDllDirectories' : is not a member of '`global nam espace'' C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE\atlcore.h(630) : error C2065: 'SetDefaultDllDirectories' : undeclared identifier C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE\atlcore.h(632) : error C2065: 'LOAD_LIBRARY_SEARCH_SYSTEM32' : undeclared identifier error: command '"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\cl.exe"' failed with exit status 2
atlcore.h
rather than following the solution described here. - Note: the build succeeded, and modules like win32api and win32file work. However, Pythonwin *does not*. I haven't had the time yet to find out exactly what is going on here: for now, consider it an open bug.
- To build the 64-bit version, use
setup.py build --plat-name=win-amd64
- Available in both the 32-bit and the 64-bit build
queuelib 1.1.1
- queuelib is a collection of persistent (disk-based) queues
- New in document revision 3
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- Available in both the 32-bit and the 64-bit build
reportlab 3.0
- reportlab is an open-source PDF generation library
- document revision 4 updated the build version from 2.6 to 3.0
- Reqiured dependency on freetype, so I built that as well (in version 2.5.2)
- Note: Version 2.6 didn't support a debug build, but version 3.0 does.
- Had to patch the code for the 64-bit build to use the proper freetype library (was referring to win32 rather than to win64)
- Available in both the 32-bit and the 64-bit build
requests 2.3.0
- requests is "HTTP for humans", whatever that means.
- New in document revision 3
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- Available in both the 32-bit and the 64-bit build
Scrapy 0.22.2
- scrapy is an open source web scraping framework. I wrote my own web scraping solution some years ago, but I am sure it was a lot less flexible ;)
- New in document revision 3
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- Available in both the 32-bit and the 64-bit build
setuptools 2.2
- setuptools allows you to "easily download, build, install, upgrade, and uninstall Python packages". Well, OK.
- The source archive includes pre-built
.exe
files. I don't know, but to a lay person like me it seems these won't work with a debug build. But then again, I've never used setuptools before, so I may be totally wrong... - I modified the install to use a plain old
setuptools
folder rather than the.egg
zip archive
simplejson 3.3.3
- simplejson is a fast, simple JSON wrapper for Python
- New in document revision 3
- Build experience (if such a thing exists) was great: it just works, and it includes proper builds for both debug and release.
- Available in both the 32-bit and the 64-bit build
six 1.5.2
- six is a Python 2 and 3 Compatibility Library
- New in document revision 3
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- Available in both the 32-bit and the 64-bit build
SQLAlchemy 0.9.3
- SQLAlchemy is a Python SQL toolkit and ORM. I am not using it personally, but lots of people seem to be
- New in document revision 3
- Build experience (if such a thing exists) was great: it just works, and it includes proper builds for both debug and release.
- Available in both the 32-bit and the 64-bit build
twisted 13.2.0
this module is not compatible with Python 3
virtualenv 1.11.4
- virtualenv is a "Virtual Python Environment builder", whatever that is.
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- New in document revision 3
- I modified the install to use a plain old
virtualenv
folder rather than the.egg
one - Available in both the 32-bit and the 64-bit build
werkzeug 0.9.4
- werkzeug is a python WSGI library required by Flask
- New in document revision 3
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- Available in both the 32-bit and the 64-bit build
wxPython 3.0.0
this module is not compatible with Python 3
w3lib 1.5
- w3lib is a library of web-related functions
- New in document revision 4
- Project doesn't use C/C++ extensions, so it isn't necessary to build two separate Debug/Release builds
- Available in both the 32-bit and the 64-bit build
zope.interface 4.1.0
- zope.interface adds "Interfaces" to Python
- New in document revision 4
- Available in both the 32-bit and the 64-bit build
Verifying you are using the updated SSL versions:
Python 3.3.4 (default, Apr 12 2014, 18:42:19) [MSC v.1800 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 1.0.1g 7 Apr 2014'
>>> ...
>>> import OpenSSL
>>> import OpenSSL.SSL
>>> OpenSSL.SSL.SSLeay_version(OpenSSL.SSL.SSLEAY_VERSION)
b'OpenSSL 1.0.1g 7 Apr 2014'
Document history
- April 12, 2014: document revision 5
- Updated OpenSSL to 1.0.1g for fix of the heartbleed issue
- March 9, 2014: document revision 3
- Added a detailed section on Debug / Release builds, and how to get those.
- Added x64 build for all components (and x64 build notes for all)
- Added tons of debug versions (for example, for win32api)
- Added many new libraries (for example, SQLAlchemy, psycopg2, beautifulsoup, and others.)
- Generally, resolved
.egg
s as standard folders - a matter of personal preference
- Feb 22, 2014: document revision 2
- Fixed minor errata. For example, the original article claimed that the official Python build is done with Visual Studio 2008: that's not true, it is built with Visual Studio 2010. But it still isn't built with the current version - 2013 :)
- OpenSSL updated to 1.0.1l
- Jan 5, 2014: First release
GK, Apr 12, 2014.