[Cython] Multiple modules in one compilation unit

Dag Sverre Seljebotn d.s.seljebotn at astro.uio.no
Wed Mar 2 18:31:49 CET 2011


On 03/02/2011 05:01 PM, Stefan Behnel wrote:
> Dag Sverre Seljebotn, 02.03.2011 16:37:
>> On 03/02/2011 04:11 PM, Lisandro Dalcin wrote:
>>> On 2 March 2011 08:35, Stefan Behnel<stefan_ml at behnel.de> wrote:
>>>> Dag Sverre Seljebotn, 02.03.2011 11:54:
>>>>> Problem is that Fortran code often has...interesting...programming
>>>>> practices. Global variables abound, and are often initialised between
>>>>> modules. Imagine:
>>>>>
>>>>> settings_mod.set_alpha(0.34)
>>>>> print compute_mod.get_alpha_squared()
>>>>>
>>>>> This behaves quite differently with two static versions rather 
>>>>> than one...
>>>> Then I'd suggest always linking dynamically.
>>>>
>>> And where are you going to put your fortran shared libraries? Dynamic
>>> linking details varies wildly across platforms... I'm very much
>>> understand Dag's use case and concerns, and I do think that some
>>> research in all this is worth it.
>>
>> I'm not sure if there's much more to research at the moment -- Stefan 
>> says
>> it is possible, and that's what I wanted to know at this stage. If I 
>> want
>> it, I obviously need to implement it myself. (And if such a patch
>> implements PEP 3121 and there's a demonstrated need for it with some 
>> users,
>> I really can't see it getting rejected just out of it being in "poor 
>> taste").
>>
>> I.e., I'm going to make Fwrap spit out multiple pyx files and worry 
>> about
>> this later. If multiple .pyx in one .so was fundamentally impossible, I
>> might have gone another route with Fwrap. That was all.
>
> The feature I could imagine becoming part of Cython is "compiling 
> packages". I.e. you'd call "cython" on a package and it would output a 
> directory with a single __init__.so that contains the modules compiled 
> from all .pyx/.py files in that package. Importing the package would 
> then trigger an import of that __init__.so, which in turn will execute 
> code in its init__init__() function to register the other modules.
>
> Would that work for you?

Yes, that sounds like exactly what I'm after.

Dag Sverre


More information about the cython-devel mailing list