上下文:我想使用我編寫的一些Python代碼,並從Matlab調用它(不是一個理想的設置,但這是我現在必須忍受的限制)。該代碼使用numpy,scipy和pandas包。我試圖動態鏈接選項,並取得了一些成功matpy。然而,要使用numpy,我需要重寫Matlab自己的庫(libgfortran,liblapack,libblas,libstdC++),而是使用LD_PRELOAD指向相同庫的系統版本。那麼如果下游的Matlab代碼嘗試使用這些庫,它總是會出現段錯誤。事實證明這是不太可靠的,即使我現在解決所有這些問題,隨着下游Matlab代碼的發展,它很容易產生不可預測的後果。從Ubuntu上的Python代碼創建靜態庫
因此我決定編寫Python代碼爲靜態庫(包括numpy的,SciPy的和熊貓所有的依賴),然後寫一個墨西哥,對這個靜態庫鏈接。
在這方面,我想對以下問題的專家意見:
哪些是用於編譯Python代碼到一個靜態庫用的,然後將它鏈接到墨西哥的目標的最可靠的工具?我現在只考慮Ubuntu 12.04平臺。我查看了Cython,Pyrex,pyInstaller,py2exe,cx_freeze - 很棒的工具,但是作爲python的新手,並且沒有將python編譯成除自動.pyc之外的任何東西,我需要您的幫助才能做出此選擇。
什麼是可能出錯/我在這個設置中應該注意的事情的陷阱/事情? 我指的是(custom.py + numpy + scipy + pandas) - > static lib ---> Mex - >從Matlab設置調用。
非常感謝!
謝謝加里!我需要了解socket如何工作,可能會回來更多的問題。爲了確保我理解更全面的內容,解決方案是1.編譯所有Python代碼,包括deps exec(或靜態lib?或無關緊要?)2.編譯Mex,通過套接字與exec交談3.調用此mex來自Matlab。對? – Kalpit
雖然我想你可以避免把所有的python變成一個單一的可執行文件,但如果你可以在運行它的服務器環境中訪問一個完整的python實現,那就行得通了。它可以在任意文件夾中很好地構建而不需要root權限,只需在python構建的配置步驟中設置--prefix =/your/path即可。套接字在Python中使用比較繁瑣,我可以在線看到如何通過Matlab使用內聯調用Java的方法實現的示例。所以,你可以避免一起使用Mex文件。 – GaryBishop