9
import itertools
print itertools#ok

the code is ok

but i can't find the itertools file.

who can tell me where is the 'itertools file'


my code is run python2.5

import itertools
print itertools.__file__


Traceback (most recent call last):
  File "D:\zjm_code\mysite\zjmbooks\a.py", line 5, in <module>
    print itertools.__file__
AttributeError: 'module' object has no attribute '__file__'

3 Answers 3

19
>>> import itertools
>>> itertools.__file__
'/usr/lib64/python2.6/lib-dynload/itertools.so'

The fact that the filename ends with .so means it's an extension module written in C (rather than a normal Python module). If you want to take a look at the source code, download the Python source and look into Modules/itertoolsmodule.c (you can also view it in your browser at http://svn.python.org/view/python/trunk/Modules/itertoolsmodule.c?view=log).

Edit (as an answer to the comment below): it also works with Python 2.5:

Python 2.5.2 (r252:60911, Oct  5 2008, 19:29:17) 
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import itertools
>>> itertools.__file__
'/usr/lib/python2.5/lib-dynload/itertools.so'
3
  • thanks,pitrou,i think you are right in python2.6, but my code run error in python 2.5,it has not a attribute named 'file'
    – zjm1126
    Commented Jan 6, 2010 at 2:53
  • What is your Python build (version, OS, origin)? Perhaps the module has been compiled statically rather than dynamically. But __file__ works in Python 2.5, too: see edited answer above. In any case, the answer I gave above is right: the module is written in C and its source code is available in the official Python source tree.
    – Antoine P.
    Commented Jan 6, 2010 at 11:29
  • 1
    hi Antoine P. my system is windows_xp, the code you give me run error,i don't know what happen.
    – zjm1126
    Commented Jan 7, 2010 at 1:22
3

For the windows users (I'm running Python 2.7.2, Win7x64, default installer package) the call to __file__ will flame out as @zjm1126 has noted, I suspect the problem being that itertools is a builtin on the windows package. If you'd picked say, exceptions? You'd get the same behaviour on another platform (e.g. Python 2.6.1 on my macbook) - Windows just happens to have a few more builtins like itertools.

It's not strictly an answer as such, but you could parse sys.modules which would give you a hint as to where it's coming from:

>>> import sys
>>> sys.modules['itertools']

<module 'itertools' (built-in)>

which points at itertools being built-in to your python executable.

Also, the imp.find_module response is providing the same information: the weird return tuple is by spec (see: http://docs.python.org/2/library/imp.html#imp.find_module) and telling you that the module is of type 6, which is the enumeration for imp.C_BUILTIN

1

try this

>>> import imp
>>> imp.find_module("itertools")

update: since yours is None, another go through a manual way. Do a sys.path

>>> import sys
>>> sys.path
['', '/usr/lib/python2.6/lib-dynload' ]

then depending on your system, use your system's search facility to find it. on my linux system

$ find /usr/lib/python2.6/lib-dynload -type f -iname "*itertools*"
/usr/lib/python2.6/lib-dynload/itertoolsmodule.so

OR, just search the entire system for the file with name "itertools".

1
  • it returns (None, 'itertools', ('', '', 6))
    – zjm1126
    Commented Jan 6, 2010 at 4:04

Not the answer you're looking for? Browse other questions tagged or ask your own question.