problems importing python module

2019-04-07 16:56发布

问题:

I'm trying to use python's bitstring module in a script and am getting an import error. This error does not happen when running from interactive mode.

Here's the code:

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

When run like this:

python test.py

I get this:

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

However, when I do this:

$ 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

It works just fine! It's the same interpreter being run by the same user. Any pointers?

回答1:

I predict you have created a bitstring.py in your current directory.



回答2:

The problem is caused by a bitstring.py file in sys.path of test.py, but not in that of the interactive python shell. Most likely, there's a bitstring.py file in the directory test.py is in, and you started your shell from another working directory.

Since python traverses sys.path from front to end, modules in the current directory - even if accidentally created - overshadow those in system library directories.



回答3:

Google App Engine actually had a similar issue at one point. The easiest solution there was simply comment the offending line or use try...except. Obviously that won't work here.

In that case, the problem was initialization order. A half second later a similar line of code was called again with success. Their solution? refactor. :-(

The best I've seen is a dynamic lookup of the class: bitstring.__dict__.get("BitArray") or getattr(bitstring, "BitArray");. It isn't ideal (and I believe I've even seen those return null), but hopefully it can get you somewhere.