“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”文件在哪里的主要内容,如果未能解决你的问题,请参考以下文章
如何在不包含列/行标题的制表符分隔文件中使用 itertools.islice()
输出文件的间距有问题 - 使用 itertools 产品循环使用来自两个不同文本文件的变量输出到第三个