Statically linked extension and relative import

David Cournapeau cournape at gmail.com
Thu May 7 13:45:17 CEST 2009


On Thu, May 7, 2009 at 8:34 PM, Andrew MacIntyre
<andymac at bullseye.apana.org.au> wrote:
> David Cournapeau wrote:
>>
>> Hi,
>>
>> I am trying to build a 3rd party extension and link it statically to
>> python. I managed to get things working by customizing Setup.local in
>> python source tree, but I have a problem for imports of the 'foo.bar'
>> form. For example, let's say the 3rd party module is laid out as
>> follows:
>>
>> foo/__init__.py
>> foo/bar.so
>>
>> and __init__.py contains:
>> import foo.bar
>>
>> I can build the bar extension and link it statically to python such as
>> from python, "import bar" works. But how can I make it "recognize"
>> "from foo import bar" ? I tried to understand how this works at the C
>> level in import.c, but I am a bit lost in the code. The ultimate goal
>> is to manage to get code coverage of the C code of the extension
>> through gcov, which does not support coverage of shared libraries ATM.
>
> If you link the bar extension statically, it is not in the foo package
> namespace (which is why "import bar" works),

Yes, I understand this.

> so should be imported as bar
> in foo's __init__.py.
>
> from foo import bar

But then I have to modify the 3rd party package for statically linked
versions. This means in particular that the same source cannot be used
for static and dynamic builds ?

cheers,

David



More information about the Python-list mailing list