更新:
想到了以前這篇存在的問題來更新一下。直接塞個文件進去是能解決報錯,但是有可能報缺少別的東西,治標不治本。裝python的時候留意了一下,有兩種情況:
- 就是bz2沒裝。
- 名稱不同,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的,改了一下名發現好用了。用在其它版本的請對應改名。