9
import itertools
print itertools#ok

代码没问题

但我找不到 itertools 文件。

谁能告诉我“itertools 文件”在哪里


我的代码运行 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__'
4

4 回答 4

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'
于 2010-01-06T01:37:50.717 回答
4

如果您正在寻找文件(当然是在 C 中),例如这里是在线的。

于 2010-01-06T03:23:04.143 回答
2

对于 Windows 用户(我正在运行 Python 2.7.2、Win7x64、默认安装程序包),__file__正如@zjm1126 所指出的那样,调用将熄灭,我怀疑问题是itertoolsWindows 包中的内置函数。如果你选择说,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

于 2012-11-07T12:03:43.037 回答
1

尝试这个

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

更新: 因为你的没有,另一个通过手动方式。做一个 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 ”的文件。

于 2010-01-06T01:33:34.237 回答