2011-06-11 46 views
11

当我在我的项目中导入igraph包时,我得到一个AttributeError。这只是发生在项目目录:如何在导入igraph时解决AttributeError?

[12:34][~]$ python2 
Python 2.7.1 (r271:86832, Apr 15 2011, 12:09:10) 
[GCC 4.5.2 20110127 (prerelease)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import igraph 
>>> 

[12:34][~]$ cd projectdir/ 
[12:34][projectdir]$ python2 
Python 2.7.1 (r271:86832, Apr 15 2011, 12:09:10) 
[GCC 4.5.2 20110127 (prerelease)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import igraph 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/site-packages/igraph/__init__.py", line 42, in <module> 
    import gzip 
    File "/usr/lib/python2.7/gzip.py", line 36, in <module> 
    class GzipFile(io.BufferedIOBase): 
AttributeError: 'module' object has no attribute 'BufferedIOBase' 
>>> 

有一个在项目目录中没有文件igraph.py:

[12:34][projectdir]$ ls -alR | grep igraph | wc -l 
0 

而且没有圆形进口。

我该如何解决这个错误?

回答

27

最有可能的是,~/projectdir中有一个模块io或项目配置的路径之一。由igraph导入的gzip模块以

import io 

开头,期望内置io模块,而不是您的项目的模块。查找io目录或io.pyio.pyc。对于可能包含名为io的模块的任何其他目录(可能在~/projectdir之外),还可以帮助详细检查sys.path

+3

谢谢。我的项目中有一个'io'软件包。下次我知道如何解决这个问题。 – any1 2011-06-11 11:05:57

+2

这就是原因......解决方案是什么?看起来很明显的解决方案是重命名项目中的'io'包,但是那里有另一个不需要重命名io包的解决方案吗? – jmetz 2013-01-16 13:07:45

+2

@mutzmatron离开你自定义的'io'是一个麻烦的秘诀,所以你应该真的重命名它。当你*可以*暂时修改'sys.path'时,这是非常脆弱的。在任何情况下,您都应该使用绝对导入,比如'import myproject.div.io_utils' – phihag 2013-01-16 13:13:34

相关问题