我正在用多個C擴展創建一個需要libhdf5的Python項目。我有一個現有的libhdf5安裝在/usr/local/lib
。對於測試和開發,我想針對位於/Users/name/some/path
的HDF5的私人版本進行開發。Homebrew/Python:說服distutils鏈接到OS X上的特定庫?
在setup.py中,我通過將「library_dirs」(和「runtime_library_dirs」,儘管在OS X上不做任何事情)設置爲/Users/name/some/path
來處理這個問題。在Linux上,這工作正常。
問題是,當我的擴展模塊被編譯時,它們與/usr/local/lib
中的HDF5副本鏈接,並且setup.py中沒有任何調整可以說服他們。
通過在運行Python時設置DYLD_LIBRARY_PATH=/Users/name/some/path
,我已經成功加載了HDF5的私有構建,因此我知道該庫已正確構建並工作。
運行在我的擴展名之一otool -L
產生這樣的:
h5py/_errors.so:
/usr/local/lib/libhdf5.8.dylib (compatibility version 9.0.0, current version 9.1.0)
/usr/local/lib/libhdf5_hl.8.dylib (compatibility version 9.0.0, current version 9.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
這證實了我們對鏈接庫的錯誤的副本。 我注意到,鏈接階段是這樣的:
clang -bundle -undefined dynamic_lookup -L/usr/local/lib -L/usr/local/opt/sqlite/lib -L/Users/name/some/path <more stuff>
和鐺是連接對HDF5的第一個版本,它可以找到猜想。
有什麼辦法強制distutils鏈接我的私人建立的圖書館?我不需要一個可重定位的版本,所以我不在乎@rpath
等
我也證實,這不會發生與系統Python,只是通過自制軟件安裝的一個。