itertools' 文件在哪里

9 投票
3 回答
25045 浏览
提问于 2025-04-15 17:40
import itertools
print itertools#ok
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__'

这段代码没问题。

但是我找不到itertools这个文件。

谁能告诉我'itertools文件'在哪里?


我的代码是在python2.5上运行的。

3 个回答

1

试试这个

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

更新: 因为你的值是 None,接下来可以手动操作一下。执行一下 sys.path

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

然后根据你的系统,使用系统的搜索功能去找它。在我的 Linux 系统上

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

或者,直接在整个系统里搜索名为 "itertools" 的文件。

2

对于Windows用户来说(我在使用Python 2.7.2,Win7x64,默认安装包),调用__file__时会出现问题,正如@zjm1126所提到的。我怀疑问题出在itertools是Windows包中的一个内置模块。如果你选择的是exceptions呢?在其他平台上(比如我在MacBook上用Python 2.6.1)也会出现同样的情况——Windows恰好有更多的内置模块,比如itertools。

这不算是一个严格的答案,但你可以查看sys.modules,这会给你一些关于模块来源的线索:

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

<module 'itertools' (built-in)>

这表明itertools是内置在你的Python可执行文件中的。

另外,imp.find_module的返回结果也提供了相同的信息:这个奇怪的返回元组是按照规范来的(参见:http://docs.python.org/2/library/imp.html#imp.find_module),它告诉你这个模块的类型是6,这个数字代表imp.C_BUILTIN

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

文件名以 .so 结尾,说明这是一个用 C 语言写的扩展模块(而不是普通的 Python 模块)。如果你想看看源代码,可以下载 Python 的源代码,然后去找 Modules/itertoolsmodule.c 这个文件(你也可以在浏览器里查看,链接是 http://svn.python.org/view/python/trunk/Modules/itertoolsmodule.c?view=log)。

编辑(作为对下面评论的回复): 这个也适用于 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'

撰写回答