事情始于我把debian9的Python3.5更新到了Python3.9,我采用的是源代码编译的方法,一般只要搜索debian升级python这几个关键词找到的方法都是这种。
编译还挺顺利,安装好之后就能用了
但是我在importpandas的时候遇到了问题
错误显示ImportError:Nomodulenamed_bz2
搜索了一阵之后找到了原因,原因是我系统中没有libbz2,所以在编译Python的时候没有把bz2编译进去。
可以去Python源代码目录再运行一次make,最后会提示bz2没有编译进去。根据不同人的机器情况,可能还会看到好几个库都没有编进去,比如我这里还有sqlite3等6个组件没有编译进去。
所以在编译之前,要先运行下这条指令,把该装的库都装上。
sudoapt-getinstalllibreadline-gplv2-devlibncursesw5-devlibssl-devlibsqlite3-devtk-devlibgdbm-devlibc6-devlibbz2-devlibffi-devzlib1g-dev
然后再make,你就会发现那些提升都没了。
之后重新运行
sudomakealtinstall
重新安装一下python3.9,这个问题就解决了。
或许有人会问为什么不能通过pip3installbz2或者_bz2来安装呢?
其实上面的解决方式已经说明了问题,这个库不是用python写的库,而是c语言写的系统动态库,这种库属于Python的底层库,得在编译Python阶段一起编译进去才能用。