[PyKDE] PyQt / sipdistutils

Jasper R. Plaisier plaisier at chem.leidenuniv.nl
Wed Nov 30 14:55:11 GMT 2005

Hello all,

I am trying to package an extension module that works with qt objects. I 
therefore wrapped the code using sip and everything seems to work fine 
when i build in the documented using a .sip file and configuration.py.

Now I am trying to package everything for distribution using 
sipdistutils. This worked fine for non-qt containing code. In this case, 
however, the .sip file contains the line %Import qt/qtmod.sip, and the 
build process stops with the error that this file cannot be found. This 
makes sense since sip runs without the -I flag.

I have now worked around the problem in a quick and dirty way by copying 
sipdistutils.py to pyqtdistutils.py and changing the code in 
_sip_compile to the following

   def _sip_compile(self, sip_bin, source, sbf) :
     import pyqtconfig
     pqconfig = pyqtconfig.Configuration()
     os.system(" ".join([sip_bin,
                 "-c", self.build_temp,
                 "-b", sbf,
                 "-I", pqconfig.pyqt_sip_dir,

This works fine. HOwever, I had te change the self.spawn call to 
os.system, because the first would stop on the error:

sip: /usr/share/sip/qt/versions.sip:30: Exactly one of this %Timeline 
must be specified with the -t flag

The -t flag is present (and shown on the screen).

I wonder if anyone knows a more generic solution for the problem of not 
being able to compile the extension module with qt, and if anyone 
understands the problem with self.spawn.

For completeness I also include my setup.py script

from distutils.core iport setup, Extension
import pyqtdistutils

  name = 'Cyclops',
  version = '0.1',
  scripts = ["scripts/Cyclops"],
  packages = ["Cyclopswidgets", "Cyclopsdata"],
  ext_modules = [
  Extension("Cyclopsdata.pylib", ["Cyclopsdata/datwrap.sip",
  "Cyclopsdata/fileio.cpp", "CyclopsModel.cpp"],
  include_dirs=["Cyclopsdata", "/usr/local/lib", "/usr/lib/qt3/include",
  /usr/share/sip"], library_dirs=["/usr/local/lib", "/usr/lib/qt3/lib"],
  libraries=["qt", "tiff"])
  cmdclass = {'build_ext': pyqtdistutils.build._ext }

Thnx all, Jasper


Jasper R. Plaisier
Biophysical Structural Chemistry Department
Leiden Institute of Chemistry
Leiden University
P.O. Box 9502, 2300 RA Leiden
The Netherlands

More information about the PyQt mailing list