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的名字去掉就成功了。
image

4.1 查找python3的安装路径

whereis python3817

image

/usr/bin/python3817 是软连接
image

4.2 确认版本名

注意:在 3.6 中,文件名里是 36m
image

注意:在3817版本里,文件名是 38 不带m (我就是在这多写了个m导致不成功)
image

文件名里,带不带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)



posted @ 2024-04-15 18:59  悟透  阅读(403)  评论(0编辑  收藏  举报