开发者

where is the 'itertools' file

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

im开发者_如何学JAVAport 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__'


>>> 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'


If you're looking for the source file (in C, of course), it's for example online here.


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


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".

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜