2021-10-19 ImportError: No module named 'PyQt4'

在使用.yml文件重現(xiàn)某conda環(huán)境后,運(yùn)行環(huán)境內(nèi)程序出現(xiàn)報(bào)錯(cuò):

Traceback (most recent call last): File "./IntroMap.py", line 53, in <module> import matplotlib.pyplot as plt File "/home/bcl/miniconda3/envs/IntroMap/lib/python2.7/site-packages/matplotlib/pyplot.py", line 115, in <module> _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup() File "/home/bcl/miniconda3/envs/IntroMap/lib/python2.7/site-packages/matplotlib/backends/__init__.py", line 32, in pylab_setup globals(),locals(),[backend_name],0) File "/home/bcl/miniconda3/envs/IntroMap/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.py", line 18, in <module> from .backend_qt5agg import FigureCanvasQTAggBase as _FigureCanvasQTAggBase File "/home/bcl/miniconda3/envs/IntroMap/lib/python2.7/site-packages/matplotlib/backends/backend_qt5agg.py", line 16, in <module> from .backend_qt5 import QtCore File "/home/bcl/miniconda3/envs/IntroMap/lib/python2.7/site-packages/matplotlib/backends/backend_qt5.py", line 26, in <module> import matplotlib.backends.qt_editor.figureoptions as figureoptions File "/home/bcl/miniconda3/envs/IntroMap/lib/python2.7/site-packages/matplotlib/backends/qt_editor/figureoptions.py", line 20, in <module> import matplotlib.backends.qt_editor.formlayout as formlayout File "/home/bcl/miniconda3/envs/IntroMap/lib/python2.7/site-packages/matplotlib/backends/qt_editor/formlayout.py", line 56, in <module> from matplotlib.backends.qt_compat import QtGui, QtWidgets, QtCore File "/home/bcl/miniconda3/envs/IntroMap/lib/python2.7/site-packages/matplotlib/backends/qt_compat.py", line 137, in <module> from PyQt4 import QtCore, QtGui

ImportError: No module named PyQt4

當(dāng)然這個(gè)報(bào)錯(cuò)看起來(lái)是某個(gè)包沒(méi)裝,當(dāng)你自行搭建一個(gè)環(huán)境的時(shí)候,確實(shí)可能是你忘記裝某個(gè)模塊了,但這個(gè)conda環(huán)境是根據(jù)別的開(kāi)發(fā)者已經(jīng)寫(xiě)好測(cè)試好的.yml文件重現(xiàn)的,所以不應(yīng)該是某個(gè)模塊缺失的問(wèn)題。

上網(wǎng)搜索了一下,也有說(shuō)是因?yàn)橛脩舡h(huán)境中裝了多個(gè)版本的python,而PyQt4只是裝在了某一個(gè)python環(huán)境下,而用戶在另一個(gè)環(huán)境中調(diào)用,鑒于conda環(huán)境的獨(dú)立性,那肯定也不是這個(gè)原因。


最后解決:

修改所調(diào)用的.py腳本中的

matplotlib.use('QT4Agg')

matplotlib.use('QT5Agg')

問(wèn)題成功解決。


為什么?

原來(lái)是因?yàn)镻yQt這個(gè)包更新了,而在不指定版本的情況下,conda重現(xiàn)環(huán)境時(shí)會(huì)默認(rèn)下載安裝鏡像源中PyQt包的最新版本,也就是PyQt5。然而我所使用的.yml文件的開(kāi)發(fā)者在當(dāng)年開(kāi)發(fā)的時(shí)候,PyQt默認(rèn)是4版本,所以會(huì)出現(xiàn)這個(gè)錯(cuò)誤。


看中文網(wǎng)上還沒(méi)有該解決方案,所以記錄一下。

原鏈接:

Fresh matplotlib install broken: installs qt5, but matplotlib rc patched to require qt4 #1068

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容