Homebrew/Python:说服distutils链接到OS X上的特定库?
我正在用多个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,只是通过自制软件安装的一个。
我的简短回答是:不要使用HomeBrew Python管理自制软件以外的版本。你可以在这里看到:https://github.com/Homebrew/homebrew/blob/master/Library/Formula/python.rb#L213他们已经将它们的库标记硬编码到Python Makefile本身中。
当然,能解决你的问题的回答更有意思:)
,你可以,如果你真的想要,猴子补丁sysconfig.get_config_vars()
提前系统库注入你的标志。你也可以猴子补丁distutils。这些都不是特别强大。
在HashDist中,我们已经优先构建自己的Python,这很令人沮丧,但我们发现它是最强大的。 (我们支持OS X上的h5py)