[英]"ImportError: No module named" when trying to run Python script
[英]Module ImportError when launching python script in Matlab
我在Matlab中使用操作系統命令來啟動python腳本。 直到最近,一切都運轉良好,實際上,我懷疑問題在於最近將Matlab升級到R2017b,將Fedora升級到FC27。
事實:如果我在外殼中啟動腳本python,那么一切正常。 但是,如果我在Matlab中啟動相同的腳本,則幾乎不會引發ImportError異常:
Traceback (most recent call last):
File "/usr/lib64/python3.6/xml/etree/ElementTree.py", line 1448, in __init__
from xml.parsers import expat
File "/usr/lib64/python3.6/xml/parsers/expat.py", line 4, in <module>
from pyexpat import *
ImportError: /usr/lib64/python3.6/lib-dynload/pyexpat.cpython-36m-x86_64-linux-gnu.so: undefined symbol: XML_SetHashSalt
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib64/python3.6/xml/etree/ElementTree.py", line 1451, in __init__
import pyexpat as expat
ImportError: /usr/lib64/python3.6/lib-dynload/pyexpat.cpython-36m-x86_64-linux-gnu.so: undefined symbol: XML_SetHashSalt
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/data_1/IRM/amigo/src/IRMAGE_python_scripts/IRMAGE_report.py", line 1409, in <module>
outFormat = 'png')
File "/data_1/IRM/amigo/src/IRMAGE_python_modules/IRMAGE_reporting.py", line 1576, in plotPatVsRef
bookRef = xlrd.open_workbook(refFile)
File "/usr/lib/python3.6/site-packages/xlrd/__init__.py", line 422, in open_workbook
ragged_rows=ragged_rows,
File "/usr/lib/python3.6/site-packages/xlrd/xlsx.py", line 784, in open_workbook_2007_xml
ensure_elementtree_imported(verbosity, logfile)
File "/usr/lib/python3.6/site-packages/xlrd/xlsx.py", line 48, in ensure_elementtree_imported
ET.iterparse(_dummy_stream)
File "/usr/lib64/python3.6/xml/etree/ElementTree.py", line 1217, in iterparse
pullparser = XMLPullParser(events=events, _parser=parser)
File "/usr/lib64/python3.6/xml/etree/ElementTree.py", line 1256, in __init__
self._parser = _parser or XMLParser(target=TreeBuilder())
File "/usr/lib64/python3.6/xml/etree/ElementTree.py", line 1454, in __init__
"No module named expat; use SimpleXMLTreeBuilder instead"
ImportError: No module named expat; use SimpleXMLTreeBuilder instead
從昨天開始,我面對這個問題有點迷失了,我承認我沒有解決這個問題的新主意……關於這個問題的所有主意,信息和幫助將非常受歡迎。
我只是想檢查有關/usr/lib64/python3.6/lib-dynload/pyexpat.cpython-36m-x86_64-linux-gnu.so的共享庫依賴關系,從而引發了ImportError異常!
在外殼中:
% ldd /usr/lib64/python3.6/lib-dynload/pyexpat.cpython-36m-x86_64-linux-gnu.so
linux-vdso.so.1 (0x00007ffd8f7c5000)
libexpat.so.1 => /lib64/libexpat.so.1 (0x00007ff82fae8000)
libpython3.6m.so.1.0 => /lib64/libpython3.6m.so.1.0 (0x00007ff82f588000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff82f369000)
libc.so.6 => /lib64/libc.so.6 (0x00007ff82ef86000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007ff82ed82000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007ff82eb7f000)
libm.so.6 => /lib64/libm.so.6 (0x00007ff82e82a000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff82ff2c000)
在Matlab中:
! ldd /usr/lib64/python3.6/lib-dynload/pyexpat.cpython-36m-x86_64-linux-gnu.so
linux-vdso.so.1 (0x00007ffeec596000)
libexpat.so.1 => /usr/local/MATLAB/R2017b/bin/glnxa64/libexpat.so.1 (0x00007fcd2931e000)
libpython3.6m.so.1.0 => /lib64/libpython3.6m.so.1.0 (0x00007fcd28dbe000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fcd28b9f000)
libc.so.6 => /lib64/libc.so.6 (0x00007fcd287bc000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fcd285b8000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007fcd283b5000)
libm.so.6 => /lib64/libm.so.6 (0x00007fcd28060000)
/lib64/ld-linux-x86-64.so.2 (0x00007fcd29758000)
因此,很明顯,問題出在Matlab發行版(libexpat.so.1.5.0)中比系統之一(libexpat.so.1.6.7)更舊的libexpat.so.1共享對象。 !!:
% ls -l /usr/local/MATLAB/R2017b/bin/glnxa64/libexpat.so*
lrwxrwxrwx. 1 root root 17 Feb 22 12:41 libexpat.so.1 -> libexpat.so.1.5.0
-r-xr-xr-x. 1 root root 182222 Jul 24 2017 libexpat.so.1.5.0
% ls -l /usr/lib64/libexpat.so*
lrwxrwxrwx. 1 root root 17 Nov 6 18:00 /usr/lib64/libexpat.so -> l ibexpat.so.1.6.7
lrwxrwxrwx. 1 root root 17 Nov 6 18:00 /usr/lib64/libexpat.so.1 -> libexpat.so.1.6.7
-rwxr-xr-x. 1 root root 206000 Nov 6 18:00 /usr/lib64/libexpat.so.1.6.7
我通過將Matlab distrib的共享對象移到排除目錄來解決此問題,以強制使用系統之一!
# cd /usr/local/MATLAB/R2017b/bin/glnxa64
# mkdir exclude
# mv libexpat.so* exclude/
現在一切正常!
PS:在升級Matlab和Fedora之后,我遇到了一些其他問題,無法正確運行Matlab,在此不再贅述。 但是,如果有人對Matlab和FC26或FC27有其他問題,我可以應要求提供我所做的所有更改(所有更改都與Matlab發行版中太舊的共享對象有關!!!)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.