[Cython] Multiple modules in one compilation unit

Stefan Behnel stefan_ml at behnel.de
Wed Mar 2 11:48:25 CET 2011


Dag Sverre Seljebotn, 02.03.2011 11:20:
> c) Somehow provide more than one module in the same compilation unit.
> Again, this requires the build to work correctly, but seems less dangerous,
> and also has the advantage of *allowing* static linking of the Fortran
> library, if one wants to.
>
> But is something like this possible? Could one implement
>
> cython -o assembly.c file1.pyx file2.pyx file3.pyx
>
> ...where assembly.so would contain three Python modules? (initfile1,
> initfile2, and so on...)

Can't currently work because the three modules would define the same static 
C names. This could be fixed as part of the PEP 3121 implementation:

http://trac.cython.org/cython_trac/ticket/173

Or it could be worked around by overriding the prefixes in Naming.py (which 
sounds ugly).

Generally speaking, I'm -1 on this idea. I don't see a real use case, and 
you're saying yourself that this isn't required to make your Fortran use 
case work either.


> - If you build the Fortran code as a static library (rather common...),
> then each pyx file will have their own copy. This will link successfully
> but likely have a rather poor effect.

So? lxml has two main modules, and if you build it statically against 
libxml2/libxslt, you end up with two static versions of that library in the 
two modules. Takes up some additional space, but otherwise works beautifully.

Stefan


More information about the cython-devel mailing list