在Colab中进行绘图时,python-igraph“'bytes'对象没有属性'encode'”

时间:2019-09-10 01:13:37

标签: python igraph google-colaboratory

尽管已经适当安装了libcairo2-dev和pip安装了cairocffi,但我无法在Google Colab中使用python-igraph绘制任何内容。

我想在Colab的项目中使用igraph,专门用于绘制图形和节点社区。安装步骤顺利进行,没有错误。但是当我尝试绘制一个简单的图形时,我从igraph/drawing/__init__.py中收到关于utf-8编码的错误。将pycairo换成cairocffi后,我得到了同样的错误。

!sudo apt install build-essential python-dev libxml2 libxml2-dev zlib1g-dev libcairo2-dev
!pip install cairocffi python-igraph
import igraph as ig
g = ig.Graph(edges=[(0,1)])
ig.plot(g)

没有情节出现,我得到:

AttributeError                            Traceback (most recent call last)

/usr/local/lib/python3.6/dist-packages/IPython/core/formatters.py in __call__(self, obj)
    336             method = get_real_method(obj, self.print_method)
    337             if method is not None:
--> 338                 return method()
    339             return None
    340         else:

/usr/local/lib/python3.6/dist-packages/igraph/drawing/__init__.py in _repr_svg_(self)
    352         surface.finish()
    353         # Return the raw SVG representation
--> 354         return io.getvalue().encode("utf-8")
    355 
    356     @property

AttributeError: 'bytes' object has no attribute 'encode'

<igraph.drawing.Plot at 0x7f6b34afb160>

2 个答案:

答案 0 :(得分:2)

显然,这是一个已知的错误,但是由于某些原因尚未修复,请参见GtiHub issue tracker

您将需要手动编辑文件,并将故障行替换为(例如)

result = io.getvalue()
return result.decode("utf-8")

答案 1 :(得分:1)

按照@Silmathoron的解释,我换了 !pip install cairocffi python-igraph 在我最初的问题中

!pip install cairocffi
!pip download python-igraph
!tar -xf python-igraph-0.7.1.post6.tar.gz
with open("python-igraph-0.7.1.post6/igraph/drawing/__init__.py", 'r') as file:
  text = file.read()
assert text[14797:14803] == 'encode'
with open("python-igraph-0.7.1.post6/igraph/drawing/__init__.py", 'w') as file:
  file.write(text[:14797] + "decode" + text[14803:])
!pip install --no-index --find-links="." python-igraph

解决了问题。 (尽管在最后一次安装pip时,Colab挂了很长时间很奇怪。)