где находится файл 'itertools' - PullRequest
9 голосов
/ 06 января 2010
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 ]

18 голосов
/ 06 января 2010
>>> 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'
4 голосов
/ 06 января 2010

Если вы ищете файл source (конечно, в C), он, например, онлайн здесь .

2 голосов
/ 07 ноября 2012

Для пользователей Windows (я использую Python 2.7.2, Win7x64, пакет установки по умолчанию) вызов __file__ будет вспыхивать, как заметил @ zjm1126, я подозреваю, проблема в том, что itertools является встроенным на пакет windows. Если бы вы выбрали, скажем, exceptions? Такое поведение будет и на другой платформе (например, Python 2.6.1 на моем macbook) - в 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

1 голос
/ 06 января 2010

попробуйте

>>> 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 ".

...