2011-06-03 45 views
6

Estoy tratando de usar el módulo bitstring de python en un script y estoy obteniendo un error de importación. Este error no ocurre cuando se ejecuta desde el modo interactivo.problemas al importar el módulo python

Aquí está el código:

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

Cuando se ejecuta la siguiente manera:

python test.py 

me sale esto:

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

Sin embargo, cuando hago esto:

$ 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 

¡Funciona muy bien! Es el mismo intérprete dirigido por el mismo usuario. ¿Alguna sugerencia?

+7

Imprime 'bitsrting .__ file__' desde dentro de la secuencia de comandos en modo no interactivo y asegurarse de que se está apuntando al archivo correcto – inspectorG4dget

+4

¿Está sucediendo esto en el mismo directorio? – 6502

+9

Predigo que ha creado un bitstring.py en su directorio actual. –

Respuesta

1

El problema está causado por un archivo bitstring.py en sys.path de test.py, pero no en el del shell de python interactivo. Lo más probable es que haya un archivo bitstring.py en el directorio test.py, y haya iniciado el shell desde otro directorio de trabajo.

Dado que python atraviesa sys.path de adelante hacia atrás, los módulos en el directorio actual, incluso si se crean accidentalmente, eclipsan a los de los directorios de la biblioteca del sistema.

0

Google App Engine en realidad tenía similar issue en un punto. La solución más fácil fue simplemente comentar la línea ofensiva o usar try ... except. Obviamente eso no funcionará aquí.

En ese caso, el problema era el orden de inicialización. Medio segundo después, se volvió a llamar a una línea similar de código con éxito. Su solución? refactor :-(

Lo mejor que he visto es una búsqueda dinámica de la clase: bitstring.__dict__.get("BitArray") o getattr(bitstring, "BitArray");. No es ideal (y creo que incluso he visto esos resultados nulos), pero con suerte puede conseguirte en alguna parte.

7

Mi predicción es que haya creado un bitstring.py en el directorio actual.

Cuestiones relacionadas