2016-02-12 142 views
2

我想用mpi4py使用python。然而,當我在Python環境中運行from mpi4py import MPI,我得到以下錯誤:mpi4py:庫未加載:/usr/local/lib/libmpi.1.dylib

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: dlopen(/usr/local/lib/python2.7/site-packages/mpi4py/MPI.so, 2): Library not loaded: /usr/local/lib/libmpi.1.dylib 
    Referenced from: /usr/local/lib/python2.7/site-packages/mpi4py/MPI.so 
    Reason: image not found 

在指定的路徑(/usr/local/lib/)我有什麼,我認爲是叫libmpi.12.dylib所需文件的版本。我已經看了source code for mpi4py,並從我能告訴這個文件是有效的,但由於某種原因mpi4py(MPI.so具體)仍然試圖使用.1。版。

無論我使用mpirun,mpiexec運行,還是僅在終端python會話中輸入import命令(最後一個是我如何生成此處複製的錯誤消息),都會顯示錯誤消息。

我將不勝感激任何幫助。我曾嘗試重新安裝和/或更新所有相關的軟件包和代碼,但尚未解決問題。

---更新--- 無奈之下,我嘗試將libmpi.12.dylib重命名爲libmpi.1.dylib,至少現在它已經起作用了。如果任何人有一個解決方案,我仍然對非黑客解決方案感興趣。

+0

當你運行你的程序時,你在使用MPI嗎?也就是說,你是使用命令'mpiexec -n#python myprogram.py ...',還是隻使用'python myprogram.py ...'?要清楚,前者在使用MPI時是正確的。 – Kevin

+0

@凱文,我已經更新了我的問題以迴應您的評論。 – jthomas

回答

1

我認爲你的問題現在應該得到解決,但是,我以後有一個迭代完全相同的問題;

ImportError: dlopen(/Users/<proj>/venv/lib/python3.5/site-packages/mpi4py/MPI.cpython-35m-darwin.so, 2): 
Library not loaded: /usr/local/opt/open-mpi/lib/libmpi.12.dylib 
    Referenced from: /Users/<proj>/venv/lib/python3.5/site-packages/mpi4py/MPI.cpython-35m-darwin.so 
    Reason: image not found 

我的機器有一個libmpi.20.dylib,但沒有libmpi.12.dylib,雖然mpi4py的來源似乎檢查這一點,它沒有爲我工作。我的快速和骯髒的解決方法是做一個符號鏈接;

ln -s /usr/local/opt/open-mpi/lib/libmpi.20.dylib /usr/local/opt/open-mpi/lib/libmpi.12.dylib 

它的工作(至少,它能夠加載庫)。請注意,我實際上並沒有在本地使用MPI,我只是包含了這些庫,因此代碼對於羣集來說可能是或多或少的可移植的。

-frbl

相關問題