赞
踩
凡是报错信息为AttributeError: 'xxxx' object has no attribute 'yyyy'
的,都可以考虑一下是因为该库版本与所使用代码不匹配造成的。通常是版本太低造成的,比如在后续更新过程中,该方法被改变了,所以再使用以前的方法名,就会报错找不到该方法了。比如,我在使用matplotlib
库的时候,报错如下:
Traceback (most recent call last):
File "layout_examples.py", line 71, in <module>
plot_graph_2d(g, (5, 5), plot_terminals=False)
File "/home/xxx/yyy/graphcut/PyMaxflow/examples/examples_utils.py", line 21, in plot_graph_2d
nx.draw(nxgraph, pos=positions)
File "/home/xxx/anaconda3/envs/zzz/lib/python3.8/site-packages/networkx/drawing/nx_pylab.py", line 126, in draw
draw_networkx(G, pos=pos, ax=ax, **kwds)
File "/home/xxx/anaconda3/envs/zzz/lib/python3.8/site-packages/networkx/drawing/nx_pylab.py", line 269, in draw_networkx
edge_collection = draw_networkx_edges(G, pos, arrows=arrows, **kwds)
File "/home/xxx/anaconda3/envs/zzz/lib/python3.8/site-packages/networkx/drawing/nx_pylab.py", line 518, in draw_networkx_edges
if not cb.iterable(width):
AttributeError: module 'matplotlib.cbook' has no attribute 'iterable'
知道了报错原因,我们的解决方法也就很显而易见了。最简单的就是,将已经安装的出错的库卸载掉,然后重新安装更低(或更高)版本的即可。
首先,运行如下命令,查看一下已安装的matplotlib的版本:
conda list
可以看到,版本是3.4.3。我们可以直接去该库的官网上,查看当前最新版本和历史版本,网址:https://pypi.org/project/matplotlib/3.6.1/#history。可以看到,当前最新版本是3.6.1,更新于2022.10.8。
但是旧版本有那么多,我该如何确定我需要安装哪个版本呢?虽然是因为当前所使用的库太新了所导致的这个问题,但是也不是说我安装的越旧越好(容易出错,可以见下文注意事项3.1所述)。我们可以通过所使用代码的修改时间来进行大致确定。也就是说,比如我现在要跑的这个代码,是作者2020年那会儿公开的,那么,我就可以找一下matplotlib在2020年左右时候的版本号。这里,我就使用了3.1.0版本的,发布于2019.5.19。那么,安装命令如下:
pip install matplotlib==3.1.0
安装成功后,再去运行代码。如果还是报同样错误的话,那么可以考虑再重新安装更低一些的版本。
因为一开始我也是直接百度了这个错误,然后就看到有一篇博客说安装2.2.3版本的就好了。于是我就直接卸载,然后安装了2.2.3版本的,结果安装过程中报错了,如下:
是一个很长的错误,下面还有很多内容。具体报这个错误的原因,我们这里就不深究了,我猜测可能是库之间的版本冲突、该版本太老了等原因。从官网上可以看到,2.2.3版本是2018.8.12发布的,距今还是有一些年头了。所以也就回到上面说到的,并不是库的版本越低越好,最重要的是“合适”。当然,安装上面说的3.1.0版本是不会报错的,我已经安装成功了。
我们在对当前环境下的库版本进行修改的时候,需要考虑一下对它进行的修改是否会影响到其他代码在该环境下的运行。这里需要分两种情况:
上面我们说到的是版本太新了,需要进行降级。而有些情况下,也可能是因为库的版本太旧了。好在使用pip卸载和安装库很方便,所以在针对具体问题的时候,我们可以多尝试不同的版本,从而找到一个合适的匹配。总之,记住以下卸载和安装指定版本库的命令即可:
# 卸载
pip uninstall matplotlib
# 安装
pip install matplotlib==3.1.0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。