Pregunta problemas al importar el módulo de python


Estoy tratando de usar Python bitstring módulo en un script y estoy recibiendo un error de importación. Este error no ocurre cuando se ejecuta desde el modo interactivo.

Aquí está el código:

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

Cuando se ejecuta así:

python test.py

Entiendo 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 bien! Es el mismo intérprete ejecutado por el mismo usuario. ¿Alguna sugerencia?


6
2018-06-03 19:39


origen


Respuestas:


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


7
2018-06-03 21:07



El problema es causado por un bitstring.py presentar en sys.path de test.py, pero no en el de la cáscara interactiva de python. Lo más probable es que haya un bitstring.py archivo en el directorio test.py está en, y comenzó su shell desde otro directorio de trabajo.

Desde que Python atraviesa sys.path De principio a fin, los módulos en el directorio actual, incluso si se crearon accidentalmente, eclipsan a los de los directorios de la biblioteca del sistema.


1
2018-06-03 20:30



Google App Engine en realidad tenía una problema similar 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 fue 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 los he visto nulos), pero espero que pueda llevarte a alguna parte.


0