如何在导入igraph时解决AttributeError?

any*_*ny1 14 python import packages igraph

当我在项目中导入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'
>>>
Run Code Online (Sandbox Code Playgroud)

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

[12:34][projectdir]$ ls -alR | grep igraph | wc -l
0
Run Code Online (Sandbox Code Playgroud)

而且没有循环进口.

我该如何解决这个错误?

phi*_*hag 31

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

import io
Run Code Online (Sandbox Code Playgroud)

并期望内置的io模块,而不是你的项目.查找io目录或io.pyio.pyc.它还可以帮助仔细检查可能包含命名模块的sys.path任何其他目录(可能在其外~/projectdir)io.

  • 谢谢.我的项目中有一个包"io".下次我知道如何解决这个问题. (3认同)
  • 这就是原因......解决方案是什么?似乎显而易见的解决方案是重命名项目中的`io`包,但是还有另一个解决方案不需要重命名io包吗? (2认同)
  • @mutzmatron离开你的自定义`io`是一个麻烦的配方,所以你应该真正重命名它.虽然你*可以*临时修改`sys.path`,但这非常脆弱.无论如何,你应该使用绝对导入,比如`import myproject.div.io_utils` (2认同)
  • 感谢确认@phihag - 尽管导入语句不能正确地考虑分层命名空间有点烦人 - 或者我更准确地说,当一个包的目录被添加到路径中时,它会使任何一个函数或子模块可导入而不指定完整的分层命名空间. (2认同)