Python前阵儿发布了3.10正式版,没有多想,和以往一样,将自己所用的Python也随之升级到了3.10版。

不曾想,升级后,使用中却出现了一些问题。

首先,有些包不支持Python 3.10,甚至包括很基础、应用很广泛的如NumPy、Pandas、SciPy等。尤其是Numpy,许多其它的包都依赖NumPy。NumPy无法正常使用,导致依赖它的包也不能正常使用。

到GitHub上看了一下,貌似也没有什么好办法,因为急用,只好将Python回滚到3.97,临时凑合一下。

然后就常常看NumPy的消息,终于盼到NumPy推出支持Python 3.10的版本,立刻安装了。本以为这样可以解决问题,可是发现,Pandas仍然不能正常安装。因为Pandas的当前最新版本依赖的不是NumPy的刚刚推出的最新版本,而是NumPy此前的版本。所以,虽然NumPy已安装完毕,Pandas还是不能安装。

这样,需要使用Pandas的程序,还是不能正常运行。老样子,到GitHub上去看,貌似也没有直接的解决方案,好像说要等待Pandas推出支持Python 3.10的版本。不过,找来找去,似乎看到Pandas成员有人说Pandas目前可以使用在Python 3.10环境中,但针对Python 3.10的版本wheel还没有生成。看到这里,心里有了一点儿希望,就想到,不使用pip进行安装,而是下载源码后,尝试直接本地编译安装的方法(需要Cython包)。于是将Pandas的最新版源码文件 pandas-1.3.4.tar.gz 下载,然后使用“python setup.py install”来进行安装。不错,Pandas竟然安装成功,可以使用了。这下,困扰多日的问题,总算暂时得以解决。

本想照葫芦画瓢,把SciPy也这样安装上去,可惜失败了,没有仔细研究问题所在。有空时慢慢研究或等待支持Python 3.10的SciPy版本吧。

还遇到一个问题,是Python 3.10中,标准包collections升级改动引起的。

在Python 3.10中,“from collections import”这样的语句已经被弃用,应当改成“from _collections_abc import”。

发现这个问题是使用pyecharts包时,包目录下render\engine.py源文件中,有一行语句“from collections import Iterable”无法正常运行,提示import失败。查看了新版collections的文档和__init__.py源文件,发现了上面提到的语句弃用问题,于是将engine.py源文件中的语句改为“from _collections_abc import Iterable”,这样,pyecharts包就可以正常使用了。

Python这次升级,改动较大,甚至支持了类似switch…case…的语法,给大家带来更多方便。不过许多功能包还没有对Python 3.10提供及时支持,可能全面方便地应用,还要再过一段时日。

最后,说一个和此次Python升级无关的问题。

使用pivottablejs包来读入Excel文件,生成数据透视表时,发现总是会有莫名其妙的空值,空值个数与读入的Excel表行数相同。后来得知,这是因为不同的换行符格式导致的。在pivottablejs目录下__init__.py文件的pivot_ui()中,增加" newline=’\n’ "作为io.open()的最后一个参数,空值的问题就解决了。

更多推荐

Python学习笔记:Python升级到3.10带来的几个问题