ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Homebrew / Python:说服distutils链接到OS X上的特定库?

2019-07-08 21:55:19  阅读:278  来源: 互联网

标签:python homebrew clang distutils macos


我正在构建一个包含多个C扩展的Python项目,需要libhdf5.我在/usr/local/lib上安装了libhdf5.对于测试和开发,我想针对位于/ Users / name / some / path的私有构建的HDF5进行开发.

在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>

并猜想clang正在连接它可以找到的第一版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)

标签:python,homebrew,clang,distutils,macos
来源: https://codeday.me/bug/20190708/1406346.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有