【问题标题】:How to solve AttributeError when importing igraph?导入igraph时如何解决AttributeError?
【发布时间】:2011-09-13 00:19:12
【问题描述】:

当我在我的项目中导入 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

并且没有循环导入。

我该如何解决这个错误?

【问题讨论】:

    标签: python import packages igraph


    【解决方案1】:

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

    开头
    import io
    

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

    【讨论】:

    • 谢谢。我的项目中有一个包io。下次我知道如何解决这个问题了。
    • 所以这就是原因......解决方案是什么?看来显而易见的解决方案是在项目中重命名io包,但是有没有另外一种不需要重命名io包的解决方案?
    • @mutzmatron 离开你的自定义io 是一个麻烦的秘诀,所以你真的应该重命名它。虽然您可以临时修改sys.path,但它非常脆弱。在任何情况下,您都应该使用绝对导入,例如 import myproject.div.io_utils
    • 感谢您确认@phihag - 虽然 import 语句不正确尊重分层命名空间有点烦人 - 或者我猜更准确地说,当一个包的目录添加到路径中时,它会使任何它的函数或子模块可以在不指定完整的分层命名空间的情况下导入。
    猜你喜欢
    • 2020-01-15
    • 2018-03-26
    • 2020-11-12
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2018-03-08
    相关资源
    最近更新 更多