1.不能導入xx包/模塊
eg:
- pandas 不能導入bz2
No module named '_bz2'
bz2的官方描述.
此模塊提供了使用bzip2壓縮算法壓縮和解壓數據的一
2.python層面分析不能導入的本質原因
import 順序
- built-in
- 當前路徑(.)
- 標準庫(sys.path)
查看bz2模塊所在的當前python中的路徑
In [1]: import bz2
In [2]: import inspect
In [3]: inspect.getsourcefile(bz2)
Out[3]: '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/bz2.py'
在導入bz2模塊的時候,bz2.py導入了_bz2模塊, 觸發了導入異常
from builtins import open as _builtin_open
import io
import os
import _compression
from threading import RLock
# 從_bz2模塊中導入BZ2Compressor, BZ2Decompressor
from _bz2 import BZ2Compressor, BZ2Decompressor
# ...
bz2(標準庫)->_bz2(內建庫, 和python解釋器打包在一起)
到此爲止,我們就明白了,不能導入_bz2的原因是python解釋器的內建模塊沒有支持bz2
所以解決思路是:
- 安裝bzip2相關的包.
- 重新源碼編譯cpython. (在configure的過程中,會根據機器是否安裝了bzip2來開啓_bz2模塊)
1.安裝bzip2
#安裝 bzip2 相關的包
yum -y install bzip2 bzip2-devel