python3 pandas模块import报错 ModuleNotFoundError: No module named '_bz2'
前言全局说明
python3 pandas模块import报错 ModuleNotFoundError: No module named '_bz2'
一、环境
ubuntu 18.04
Python 3.8.17
二、报错内容
>>> import pandas
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/qt/.local/lib/python3.8/site-packages/pandas/__init__.py", line 22, in <module>
from pandas.compat import is_numpy_dev as _is_numpy_dev # pyright: ignore # noqa:F401
File "/home/qt/.local/lib/python3.8/site-packages/pandas/compat/__init__.py", line 24, in <module>
import pandas.compat.compressors
File "/home/qt/.local/lib/python3.8/site-packages/pandas/compat/compressors.py", line 7, in <module>
import bz2
File "/usr/local/python3817/lib/python3.8/bz2.py", line 19, in <module>
from _bz2 import BZ2Compressor, BZ2Decompressor
ModuleNotFoundError: No module named '_bz2'
三、网上解决方法
第一种:将其他目录有的 so 复制到 当前版本的目录下
第二种: 重新编译python源码,在安装
四、解决方法
刚开始,使用上面方法一不成功,正准备用方法二的时候,无意发现编译时候发现是so文件名版本里,不带m,把之前复制过去的带m的名字去掉就成功了。
4.1 查找python3的安装路径
whereis python3817
/usr/bin/python3817 是软连接
4.2 确认版本名
注意:在 3.6 中,文件名里是 36m
注意:在3817版本里,文件名是 38 不带m (我就是在这多写了个m导致不成功)
文件名里,带不带m看看目录里,其他文件名就行。
4.3 复制文件
sudo cp /usr/lib/python3.6/lib-dynload/_bz2.cpython-36m-x86_64-linux-gnu.so /usr/local/python3817/lib/python3.8/lib-dynload/_bz2.cpython-38-x86_64-linux-gnu.so
chmod 755 /usr/local/python3817/lib/python3.8/lib-dynload/_bz2.cpython-38m-x86_64-linux-gnu.so
免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。
参考、来源:
https://www.cnblogs.com/wutou/p/17525439.html (python 编译命令)
https://blog.csdn.net/Tracy_Yuan2014/article/details/124969193 (lib-dynload)
https://blog.csdn.net/weixin_42587961/article/details/105779549 (另外采用直接拷贝_bz2.cpython-38-x86_64-linux-gnu.so并不能解决问题)
https://www.cnblogs.com/hengdin/articles/16277050.html (在 configure 的过程中,会根据机器是否安装了 bzip2 来开启_bz2 模块. 不能导入_bz2 的原因是 python 解释器的内建模块没有支持 bz2)