itertools' 文件在哪里
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 个回答
试试这个
>>> 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" 的文件。
对于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
。
>>> 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'