What happened to module.__file__?

Robert Kern robert.kern at gmail.com
Mon Dec 12 11:38:00 EST 2011


On 12/12/11 1:25 AM, MRAB wrote:
> On 12/12/2011 00:21, Steven D'Aprano wrote:
>> I've just started using a Debian system, instead of the usual RedHat
>> based systems I'm used to, and module.__file__ appears to have
>> disappeared for some (but not all) modules.
>>
>> On Fedora:
>>
>> [steve at orac ~]$ python -E
>> Python 2.6.2 (r262:71600, Aug 21 2009, 12:22:21)
>> [GCC 4.4.1 20090818 (Red Hat 4.4.1-6)] on linux2
>> Type "help", "copyright", "credits" or "license" for more information.
>>>>> import math
>>>>> math.__file__
>> '/usr/lib/python2.6/lib-dynload/mathmodule.so'
>>
>>
>>
>> and on Debian squeeze:
>>
>> steve at runes:~$ python -E
>> Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40)
>> [GCC 4.4.5] on linux2
>> Type "help", "copyright", "credits" or "license" for more information.
>>>>> import math
>>>>> math.__file__
>> Traceback (most recent call last):
>> File "<stdin>", line 1, in<module>
>> AttributeError: 'module' object has no attribute '__file__'
>>
>>
>> What's going on?
>>
> The documentation for __file__ says: """The __file__ attribute is not
> present for C modules that are statically linked into the interpreter;
> for extension modules loaded dynamically from a shared library, it is
> the pathname of the shared library file."""
>
> Interestingly, none of the versions on Windows that I've tried have
> that attribute for the math module. Is it platform-dependent?

It is build-dependent. Windows builds typically have math and several other 
stdlib "extension" modules built into the PythonXY.dll . Unix builds typically, 
but apparently not always, leave mathmodule.so and others as separate extension 
modules.

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
  that is made terrible by our own mad attempt to interpret it as though it had
  an underlying truth."
   -- Umberto Eco




More information about the Python-list mailing list