python解決 ModuleNotFoundError: No module named _bz2

更新:

想到了以前這篇存在的問題來更新一下。直接塞個文件進去是能解決報錯,但是有可能報缺少別的東西,治標不治本。裝python的時候留意了一下,有兩種情況:

  1. 就是bz2沒裝。
  2. 名稱不同,python3有_bz2和bz2,python2只有bz2

bz2這東西是底層系統的模塊,不是python pip安裝的部分,要在你編譯python之前裝好。如果已經報錯了,則要裝了bz2以後重新編譯安裝python。實際上在服務器上安裝自己的python的時候少了很多模塊,但是也不是python組件必要的,於是它給你列出了(如下圖所示)。雖說你也完成了安裝,日後就留下了伏筆。bz2作爲系統組件要root裝的,服務器環境這麼搞不太合適。

所以服務器上非root最直接的方法是:

請使用Anaconda

在裝python的時候就把依賴全部配置好了,省事。

接着我試了下:

python2下,有bz2沒有_bz2

python3下,都有的。

yysy,服務器沒有roor的情況,還是anaconda好用。


在服務器上安裝python3.6.5,之前用的沒什麼問題,今天使用matplotlib給出了報錯。

報錯內容:

    from _bz2 import BZ2Compressor, BZ2Decompressor

ModuleNotFoundError: No module named '_bz2'

看了一堆些常見的解決教程,都不好用,後來看了了stackflow發現了問題:

https://stackoverflow.com/questions/12806122/missing-python-bz2-module

linux下使用官方source release安裝會出現這個問題,而apt-get之類的則不會。

由於缺少root權限,也沒有yum可以用,所以好多方法都不好用。直到看到這篇:

Linux下非Root用戶解決ImportError: No module named bz2

說白了少個文件,它不一定叫bz2.so,但是大概是lib-dynload文件下的含有bz2的so文件,複製到自己的python的同名文件夾下就好了。

路徑全稱:.../python36/lib/python3.6/lib-dynload/

我找到的文件叫:_bz2.cpython-36m-x86_64-linux-gnu.so

裏面-36m是版本對應的,也必須改,例如python3.5版本就應該叫-35m。

分享這個文件,不知道哪天失效:https://pan.baidu.com/s/1fHhxNiHOLKDqZ-9wHw3JTA

 

後記:我從服務器python3.5裏面拿過來的,剛拿過來不好用,它一開始叫bz2.cpython-36m-x86_64-linux-gnu.so,

我自己用的python3.6,看了一眼目錄裏都是-36m的,改了一下名發現好用了。用在其它版本的請對應改名。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章