“itertools”文件在哪里

Posted

技术标签:

【中文标题】“itertools”文件在哪里【英文标题】:where is the 'itertools' file 【发布时间】:2010-01-06 01:29:14 【问题描述】:
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__'

【问题讨论】:

【参考方案1】:
>>> 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'

【讨论】:

谢谢,pitrou,我认为你在 python2.6 中是对的,但是我的代码在 python 2.5 中运行错误,它没有名为'file'的属性 您的 Python 版本是什么(版本、操作系统、来源)?也许模块是静态编译的,而不是动态编译的。但是__file__ 也适用于 Python 2.5:请参阅上面的编辑答案。无论如何,我上面给出的答案是正确的:该模块是用 C 语言编写的,其源代码在 Python 官方源代码树中提供。 嗨 Antoine P。我的系统是 windows_xp,你给我的代码运行错误,我不知道会发生什么。【参考方案2】:

如果您正在寻找 source 文件(当然是 C 语言),例如在线 here。

【讨论】:

【参考方案3】:

对于 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 的枚举/p>

【讨论】:

【参考方案4】:

试试这个

>>> 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”的文件。

【讨论】:

它返回 (None, 'itertools', ('', '', 6))

以上是关于“itertools”文件在哪里的主要内容,如果未能解决你的问题,请参考以下文章

python 高效的 itertools 模块

Python / Itertools:按名称获取最新文件

如何在不包含列/行标题的制表符分隔文件中使用 itertools.islice()

输出文件的间距有问题 - 使用 itertools 产品循环使用来自两个不同文本文件的变量输出到第三个

在 itertools.products 中命名可迭代的部分

python,itertools模块