2011-06-03 8 views
6

J'essaie d'utiliser le module bitstring de python dans un script et j'obtiens une erreur d'importation. Cette erreur ne se produit pas lors de l'exécution du mode interactif.Problèmes lors de l'importation du module python

Voici le code:

import bitstring 
b = bitstring.BitArray(bin='001001111') 

Exécuté comme ceci:

python test.py 

Je reçois ceci:

AttributeError: 'module' object has no attribute 'BitArray' 

Cependant, quand je fais ceci:

$ python 
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import bitstring 
>>> b = bitstring.BitArray(bin='001001111') 
>>> print b 
0b001001111 

Cela fonctionne très bien! C'est le même interpréteur qui est exécuté par le même utilisateur. Des pointeurs?

+7

Imprimez 'bitsrting .__ file__' à partir du script en mode non-interactif et assurez-vous qu'il pointe vers le fichier correct – inspectorG4dget

+4

Cela se passe-t-il dans le même répertoire? – 6502

+9

Je prédis que vous avez créé un fichier bitstring.py dans votre répertoire courant. –

Répondre

1

Le problème est dû à un fichier bitstring.py dans sys.path de test.py, mais pas à celui du shell python interactif. Très probablement, il y a un fichier bitstring.py dans le répertoire test.py, et vous avez démarré votre shell à partir d'un autre répertoire de travail. Du fait que Python parcourt sys.path du début à la fin, les modules du répertoire en cours - même s'ils sont créés accidentellement - éclipsent ceux des répertoires de la bibliothèque système.

0

Google App Engine avait en fait un similar issue à un moment donné. La solution la plus simple était simplement de commenter la ligne incriminée ou d'essayer ... sauf. Évidemment, cela ne fonctionnera pas ici.

Dans ce cas, le problème était l'ordre d'initialisation. Une demi-seconde plus tard, une ligne similaire de code a été appelée à nouveau avec succès. Leur solution? refactor. :-(

Le meilleur que j'ai vu est une recherche dynamique de la classe: bitstring.__dict__.get("BitArray") ou getattr(bitstring, "BitArray");.Il n'est pas idéal (et je crois que j'ai même vu ces retour null), mais j'espère qu'il peut vous obtenir quelque part.

7

Je prédis que vous avez créé un bitstring.py dans votre répertoire courant.

Questions connexes