9 votes

où se trouve le fichier 'itertools' ?

import itertools
print itertools#ok

le code est correct

mais je ne trouve pas le fichier itertools.

Qui peut me dire où se trouve le "fichier itertools" ?


mon code est exécuté en 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__'

18voto

Antoine P. Points 2212
>>> import itertools
>>> itertools.__file__
'/usr/lib64/python2.6/lib-dynload/itertools.so'

Le fait que le nom du fichier se termine par .so signifie qu'il s'agit d'un module d'extension écrit en C (plutôt qu'un module Python normal). Si vous voulez jeter un coup d'oeil au code source, téléchargez le code source de Python et regardez dans Modules/itertoolsmodule.c (vous pouvez également le consulter dans votre navigateur à l'adresse suivante http://svn.python.org/view/python/trunk/Modules/itertoolsmodule.c?view=log ).

Editer (en réponse au commentaire ci-dessous) : il fonctionne également avec 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'

4voto

Alex Martelli Points 330805

Si vous êtes à la recherche du source (en C, bien sûr), il est par exemple en ligne aquí .

2voto

tanantish Points 238

Pour les utilisateurs de Windows (j'utilise Python 2.7.2, Win7x64, package d'installation par défaut), l'appel à __file__ va s'éteindre comme l'a noté @zjm1126, je soupçonne que le problème est que itertools est une fonction intégrée au paquetage Windows. Si vous aviez choisi de dire, exceptions ? Vous obtiendriez le même comportement sur une autre plateforme (par exemple Python 2.6.1 sur mon macbook) - il se trouve que Windows a un peu plus d'éléments intégrés comme itertools.

Il ne s'agit pas d'une réponse à proprement parler, mais vous pouvez analyser les éléments suivants sys.modules ce qui permet de savoir d'où il vient :

>>> import sys
>>> sys.modules['itertools']

<module 'itertools' (built-in)>

qui indique que itertools est intégré à votre exécutable python.

De même, la réponse imp.find_module fournit les mêmes informations : le tuple de retour bizarre est conforme à la spécification (voir : http://docs.python.org/2/library/imp.html#imp.find_module ) et vous indique que le module est de type 6, qui est l'énumération de imp.C_BUILTIN

1voto

ghostdog74 Points 86060

Essayez ceci

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

mettre à jour : Puisque le vôtre est Aucun, une autre méthode manuelle s'impose. Faites un sys.path

>>> import sys
>>> sys.path
['', '/usr/lib/python2.6/lib-dynload' ]

puis, en fonction de votre système, utilisez la fonction de recherche de votre système pour le trouver. sur mon système linux

$ find /usr/lib/python2.6/lib-dynload -type f -iname "*itertools*"
/usr/lib/python2.6/lib-dynload/itertoolsmodule.so

OU, il suffit de rechercher dans l'ensemble du système le fichier portant le nom " itertools ".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X