[Distutils] Newbie building SWIG wrappers with distutils
W.T. Bridgman
wtbridgman at radix.net
Wed Jul 23 23:20:50 EDT 2003
Hello,
I searched the list archives and found some mention of getting SWIG
v1.3 working with distutils but I couldn't find anything on the results
of that effort.
I've got a set of python modules that I'm beginning to convert to C/C++
extensions and some C/C++ code I want to wrap for Python using SWIG
v1.3. I can get the extensions to build and work on their own (MacOS X
10.2.4, MacPython 2.3b1) but I can't get a distutils module to build
them.
My package directory looks something like this:
Lib/
Lib/moduleA.py
Lib/moduleB.py
Packages/
Packages/__init__.py
Packages/moduleC/
Packages/moduleC/moduleC.i
Packages/moduleC/Lib/__init__.py
Packages/moduleC/Include/moduleC.h
Packages/moduleC/Src/moduleC.c
where moduleA, moduleB are currently pure python but which may
eventually converted to wrappers around C code and moduleC is being
built as an extension.
Based on the docs and study of other setup.py scripts, my script looks
something like:
extra_compile_args=["-Ddarwin"]
packages=["WTBlib"]
package_dir={'WTBlib':"Lib"}
include_dirs=[os.path.join('/usr','local','lib')]
ext_modules=[]
packages.append('WTBlib.moduleC')
package_dir['WTBlib.moduleC']=os.path.join('Packages','moduleC','Lib')
include_dirs.append(os.path.join('Packages','moduleC','Include'))
ext_modules.append(Extension('moduleC',
[os.path.join('Packages','moduleC','Src','moduleC.c'),
os.path.join('Packages','moduleC','moduleC.i')],
extra_compile_args = extra_compile_args,
include_dirs=include_dirs))
setup(name='WTBlib',version = "0.1",
packages = packages,
package_dir = package_dir,
description = "",
include_dirs = include_dirs,
ext_package = "WTBlib",
ext_modules = ext_modules)
Currently, it fails trying to build the SWIG wrapper. So I built the
wrappers manually (moduleC_wrap.c and moduleC.py and modified setup.py
accordingly.
I expected it to build in site-packages something like:
WTBlib/
WTBlib/moduleA.py
WTBlib/moduleB.py
WTBlib/moduleC/
WTBlib/moduleC/_moduleC.so
WTBlib/moduleC/moduleC.py
WTBlib/moduleC/__init__.py
which I believe is what I want. However, after having to modify things
like #include paths in the wrapper file I can finally get it to build
something like:
WTBlib/
WTBlib/__init__.py
WTBlib/moduleA.py
WTBlib/moduleB.py
WTBlib/moduleC.so
WTBlib/moduleC/
WTBlib/moduleC/moduleC.py
WTBlib/moduleC/__init__.py
which just doesn't work at all. Pretends to import but no guts in the
routines.
Part of my problem is clearly that I don't understand how each of the
components entered into the setup.py gets transformed into a path for
such things as file copy and compilation parameters. Is there a better
source of info on that?
What is the status of letting distutils build the wrapper files?
Also, just what is the __init__.py file for and is there ever a reason
to put routines in it?
Thanks,
Tom
More information about the Distutils-SIG
mailing list