簡體   English   中英

在Matlab中啟動python腳本時模塊ImportError

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM