Compiling disutil modules on Windows
Geoff Caplan
geoff at variosoft.com
Sun Aug 8 05:18:42 EDT 2004
Hi folks,
I have Sébastien Sauvage's example extension compiled and working.
For the record, here is what I did, updated for Python 2.3.
For the gory details, see:
http://sebsauvage.net/python/mingw.html
1) Install MinGW
- Go to http://www.mingw.org/download.shtml
- Find the current version of MinGW. At the time of writing, this is
MinGW-3.1.0-1.exe. It's around 14 megs.
- Run the install
- Rename the MinGW directory to gcc, if desired
2) Install SWIG
- Go to http://sourceforge.net/project/showfiles.php?group_id=1645
You are looking for SWIGWIN.
- rename the installed directory to Swig, if desired
3) Add gcc and Swig to your Autoexec.bat file
This is normally found at C:\Autoexec.bat
Mine looked like this:
SET PATH=c:\gcc\bin;%PATH%
SET PATH=c:\Swig;%PATH%
I rebooted to activate these paths. If you knew Windoze better than
I do, there is probably a more elegant way to do this.
4) Copy python23.dll to your Python libs directory
Search C:\ for python23.dll.
On Win2000, you will find it in c:\WINNT\system32\
Copy it to C:\Python23\libs\
5) Compile a test extension
------------------------------------------
- Create the setup.py file (note the underscore on the extension name:
this seems to be a requirement)
# setup.py
import distutils
from distutils.core import setup, Extension
setup(name = "Simple example from the SWIG website",
version = "2.3",
ext_modules = [Extension("_example", ["example.i","example.c"])])
------------------------------------------
- Create the example.c file
/* File : example.c */
#include <time.h>
double My_variable = 3.0;
int fact(int n) {
if (n <= 1) return 1;
else return n*fact(n-1);
}
int my_mod(int x, int y) {
return (x%y);
}
char *get_time() {
time_t ltime;
time(<ime);
return ctime(<ime);
------------------------------------------
- Create the example.i file
/* example.i */
%module example
%{
/* Put header files here (optional) */
%}
extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time()
------------------------------------------
- Now launch your dos shell and cd to the directory containing your
example files.
- Run the command: python setup.py build -cmingw32
If all goes well, this will create a directory "build" in the same
directory as your files. You will find your new dll "_example.pyd"
under lib.win32
- Copy the dll to E:\Python23\DLLs\
6) Run your test extension
- Launch a Python shell and run:
>>> import _example
>>> _example.fact(5)
120
>>> _example.get_time()
'Sun Aug 08 10:09:25 2004\n'
I tried renaming the extension without the leading underscore but this
generates an error. I am new to Python: perhaps a SWIG guru could
explain why the underscore is required, or if not required, how it can
be avoided?
Hope someone finds this useful...
------------------
Geoff Caplan
Vario Software Ltd
(+44) 121-515 1154
More information about the Python-list
mailing list