自 Mac OS 10.11 El Capitan 起,具有系统完整性保护的 DYLD_LIBRARY_PATH 技巧的替代方案

2023-11-24

这是我所拥有的:

  • Mac 操作系统 10.11 埃尔卡皮坦
  • python 2.7.12,从 python.org 安装/Library/Frameworks/Python.framework/
  • 皮查姆 2016.2.3
  • vtk 7.1.0

这是我所做的:

  • 在本地构建一个 python 模块。就我而言,这是vtk。有关摘要,请参阅我用来配置 vtk 的 CMake 调用。

    cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Release -DVTK_WRAP_PYTHON=ON -DBUILD_EXAMPLES=OFF -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=OFF -DCMAKE_INSTALL_PREFIX="/opt/dev/versions/vtk/vtk-7.1.0-shared" -DPYTHON_INCLUDE_DIR="/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/" -DPYTHON_LIBRARY="/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib"
    
  • 将 python 包安装在 python 可以找到的位置。就我而言,这是/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages请注意,我需要延长DYLD_LIBRARY_PATH通过库所在的位置:/opt/dev/versions/vtk/vtk-7.1.0-shared/lib/.

  • 如果我从终端启动 python,我可以成功导入 vtk。

    import vtk
    v = vtk.vtkVersion()
    print v.GetVTKVersion()
    
  • 如果我尝试在 PyCharm 的 python 控制台中导入 vtk,则会收到以下错误:

    Traceback (most recent call last):
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/IPython/core/interactiveshell.py", line 2881, in run_code
        exec(code_obj, self.user_global_ns, self.user_ns)
      File "<ipython-input-2-b7e11aadda62>", line 1, in <module>
        import vtk
      File "/Applications/PyCharm.app/Contents/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
        module = self._system_import(name, *args, **kwargs)
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/vtk/__init__.py", line 41, in <module>
        from .vtkCommonCore import *
      File "/Applications/PyCharm.app/Contents/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
        module = self._system_import(name, *args, **kwargs)
      File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/vtk/vtkCommonCore.py", line 9, in <module>
        from vtkCommonCorePython import *
      File "/Applications/PyCharm.app/Contents/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
        module = self._system_import(name, *args, **kwargs)
    ImportError: No module named vtkCommonCorePython
    

到目前为止,我明白问题是由系统完整性保护(SIP) 已在 El Capitan 中引入。影响之一是子进程只具有禁止进入到其他资源,PyCharm 最有可能将 python 作为单独的进程执行。

我还了解到 python 无法导入 vtk,因为它找不到 python 模块链接到的 dylib。我可以通过两种方式验证这一点:

  • The DYLD_LIBRARY_PATH是空的。这是因为 python 在 PyCharm 中作为子进程运行:os.getenv('DYLD_LIBRARY_PATH')回报None.
  • 当我复制所有库时/opt/dev/versions/vtk/vtk-7.1.0-shared/lib/到当前工作目录,我可以导入模块

现在问题: 显然,DYLD_LIBRARY_PATH不能在子进程中使用,因此自 El Capitan 以来不应再使用。那么,如何正确替换这个在 MacOS 10.11 之前运行良好的“联动黑客”呢?有办法还能用吗DYLD_LIBRARY_PATH?

禁用 SIP 不是一个选项。显然,它有助于将 dylibs 复制到当前工作目录中,但这对我来说不可行。然而,将库放在(vtk 的)站点包位置中并没有帮助。

我很确定很多人一直依赖DYLD_LIBRARY_PATH-hack 现在正在与 SIP 的后果作斗争 - 这就是为什么我认为社区可能会从这个相当冗长的问题中受益。


经过长时间的斗争,我终于解决了最后一点问题。

通过设置一个RPATH 的固定值运行路径相关的库已安装的二进制文件,我的链接问题消失了。

实现这一目标有不同的可能性。我想一种选择是使用install_name_tool。对我来说,最简单的方法是使用适当的 CMake 标志构建 vtk。这是我更新的电话cmake, where CMAKE_MACOSX_RPATH and CMAKE_INSTALL_RPATH做一些改变:

    cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Release \
              -DVTK_WRAP_PYTHON=ON \
              -DBUILD_EXAMPLES=OFF \
              -DBUILD_SHARED_LIBS=ON \
              -DBUILD_TESTING=OFF \
              -DCMAKE_INSTALL_PREFIX="/opt/dev/versions/vtk/vtk-7.1.0-shared" \
              -DCMAKE_MACOSX_RPATH=ON \
              -DCMAKE_INSTALL_RPATH="/opt/dev/versions/vtk/vtk-7.1.0-shared/lib" \
              -DPYTHON_INCLUDE_DIR="/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/" \
              -DPYTHON_LIBRARY="/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib"

Read here有关 CMake 的 rpath 处理的更多信息。注意otool -L vtkCommonCorePython.so(举个例子)仍然会写@rpath在输出中,但值仍然是固定的。

@rpath/libvtkCommonCorePython27D-7.1.1.dylib (compatibility version 0.0.0, current version 0.0.0)
@rpath/libvtkWrappingPython27Core-7.1.1.dylib (compatibility version 0.0.0, current version 0.0.0)
/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0)
@rpath/libvtksys-7.1.1.dylib (compatibility version 0.0.0, current version 0.0.0)
@rpath/libvtkCommonCore-7.1.1.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自 Mac OS 10.11 El Capitan 起,具有系统完整性保护的 DYLD_LIBRARY_PATH 技巧的替代方案 的相关文章

  • 中断 Select 以添加另一个要在 Python 中监视的套接字

    我正在 Windows XP 应用程序中使用 TCP 实现点对点 IPC 我正在使用select and socketPython 2 6 6 中的模块 我有三个 TCP 线程 一个读取线程通常会阻塞select 一个通常等待事件的写入线程
  • 为什么从 Pandas 1.0 中删除了日期时间?

    我在 pandas 中处理大量数据分析并每天使用 pandas datetime 最近我收到警告 FutureWarning pandas datetime 类已弃用 并将在未来版本中从 pandas 中删除 改为从 datetime 模块
  • Python getstatusoutput 替换不返回完整输出

    我发现了这个很棒的替代品getstatusoutput Python 2 中的函数在 Unix 和 Windows 上同样有效 不过我觉得这个方法有问题output被构建 它只返回输出的最后一行 但我不明白为什么 任何帮助都是极好的 def
  • 独立滚动矩阵的行

    我有一个矩阵 准确地说 是 2d numpy ndarray A np array 4 0 0 1 2 3 0 0 5 我想滚动每一行A根据另一个数组中的滚动值独立地 r np array 2 0 1 也就是说 我想这样做 print np
  • 使用字典映射数据帧索引

    为什么不df index map dict 工作就像df column name map dict 这是尝试使用index map的一个小例子 import pandas as pd df pd DataFrame one A 10 B 2
  • 在Python中连接反斜杠

    我是 python 新手 所以如果这听起来很简单 请原谅我 我想加入一些变量来生成一条路径 像这样 AAAABBBBCCCC 2 2014 04 2014 04 01 csv Id TypeOfMachine year month year
  • Python beautifulsoup 仅限 1 级文本

    我看过其他 beautifulsoup 得到相同级别类型的问题 看来我的有点不同 这是网站 我正试图拿到右边那张桌子 请注意表的第一行如何展开为该数据的详细细分 我不想要那个数据 我只想要最顶层的数据 您还可以看到其他行也可以展开 但在本例
  • 在 Sphinx 文档中*仅*显示文档字符串?

    Sphinx有一个功能叫做automethod从方法的文档字符串中提取文档并将其嵌入到文档中 但它不仅嵌入了文档字符串 还嵌入了方法签名 名称 参数 我如何嵌入only文档字符串 不包括方法签名 ref http www sphinx do
  • 如何通过 TLS 1.2 运行 django runserver

    我正在本地 Mac OS X 机器上测试 Stripe 订单 我正在实现这段代码 stripe api key settings STRIPE SECRET order stripe Order create currency usd em
  • 如何使用 pybrain 黑盒优化训练神经网络来处理监督数据集?

    我玩了一下 pybrain 了解如何生成具有自定义架构的神经网络 并使用反向传播算法将它们训练为监督数据集 然而 我对优化算法以及任务 学习代理和环境的概念感到困惑 例如 我将如何实现一个神经网络 例如 1 以使用 pybrain 遗传算法
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • 加快网络抓取速度

    我正在使用一个非常简单的网络抓取工具抓取 23770 个网页scrapy 我对 scrapy 甚至 python 都很陌生 但设法编写了一个可以完成这项工作的蜘蛛 然而 它确实很慢 爬行 23770 个页面大约需要 28 小时 我看过scr
  • import matplotlib.pyplot 给出 AttributeError: 'NoneType' 对象没有属性 'is_interactive'

    我尝试在 Pycharm 控制台中导入 matplotlib pyplt import matplotlib pyplot as plt 然后作为回报我得到 Traceback most recent call last File D Pr
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 在 Mac 上使用 Eclipse 进行 C++ 调试器

    当我最终设置我的 mac 来使用 eclipse 后 我无法调试 我尝试通过谷歌寻求帮助 但没有一个答案对我有用 所以 我需要有人帮助我在 eclipse 上安装和使用 c c 调试器 我安装了 Xcode 5 0 感谢您的帮助 Roy 您
  • 根据列 value_counts 过滤数据框(pandas)

    我是第一次尝试熊猫 我有一个包含两列的数据框 user id and string 每个 user id 可能有多个字符串 因此会多次出现在数据帧中 我想从中导出另一个数据框 一个只有那些user ids列出至少有 2 个或更多string
  • 为什么 Pickle 协议 4 中的 Pickle 文件是协议 3 中的两倍,而速度却没有任何提升?

    我正在测试 Python 3 4 我注意到 pickle 模块有一个新协议 因此 我对 2 个协议进行了基准测试 def test1 pickle3 open pickle3 wb for i in range 1000000 pickle
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • python import inside函数隐藏现有变量

    我在我正在处理的多子模块项目中遇到了一个奇怪的 UnboundLocalError 分配之前引用的局部变量 问题 并将其精简为这个片段 使用标准库中的日志记录模块 import logging def foo logging info fo
  • 实现 XGboost 自定义目标函数

    我正在尝试使用 XGboost 实现自定义目标函数 在 R 中 但我也使用 python 所以有关 python 的任何反馈也很好 我创建了一个返回梯度和粗麻布的函数 它工作正常 但是当我尝试运行 xgb train 时它不起作用 然后 我

随机推荐

  • 带颜色渐变填充的 Matplotlib 矩形

    我想在我的轴实例中的任意位置 任意尺寸绘制一个从左到右渐变颜色填充的矩形 ax1 坐标系 我的第一个想法是创建一个路径补丁并以某种方式将其填充设置为颜色渐变 但根据这个帖子没有办法做到这一点 接下来我尝试使用颜色条 我创建了第二个轴实例ax
  • 在matlab中,如何在图像上绘制网格

    如何在图像上绘制网格 它应该成为该图像本身的一部分 它应该能够在图像本身上显示一些行和列 可以指定行和列的线 事实上 一些研究论文讨论有关图像扭曲的结果的方式让我感到鼓舞 其中一个链接是这样的 http www hammerhead com
  • 支持 Final 字段的 Java 持久性提供程序

    我对 Java 很陌生 但我已经养成了尽可能使用 Final 声明不变性的习惯 我认为这是一件好事 考虑 f 我读到 JPA 不支持最终字段 休眠 TopLink 我不确定这些 但我现在更喜欢 JPA 从理论上讲 是否有可能 比如说通过反射
  • 如何使用 OpenSSL 编译 .c 文件?

    我正在尝试编译一个小的 c 文件 其中包含以下内容 include
  • 如何仅使用 Parser 实例将 XML 写入文件?

    这是我的 Groovy 代码 def xml new XmlParser parse fileName xml each e gt some changes are being made to XML xml append test tes
  • 为什么 SIGFPE 用于整数算术异常?

    Why was SIGFPE用于整数算术异常 例如除以零 而不是为整数算术异常创建单独的信号或通常首先为算术异常命名信号 IEEE Std 1003 1 标准将 SIGFPE 定义为 错误的算术运算 并且并没有真正提到浮点运算 这背后的原因
  • 如何使用 TF2.0 中内置的 Keras 生成 CNN 热图(tf.keras)

    我曾经基于 TensorFlow 1 之上的独立 Keras 库为我的卷积神经网络生成热图 然而 在我切换到 TF2 0 并内置之后 效果很好tf keras实施 与急于执行 我不能再使用旧的热图生成代码 所以我为 TF2 0 重写了部分代
  • typedef 函数指针?

    我正在学习如何动态加载 DLL 但我不明白这一行 typedef void FunctionFunc 我有几个问题 如果有人能够回答他们 我将不胜感激 Why is typedef used 语法看起来很奇怪 后void不应该有函数名什么的
  • Babel ESLint:类型错误:无法读取 null 的属性“范围”

    我使用 babel eslint 来检查 修复我的代码 工作得很好 直到我想采用一些 ES2017async await found overhere 我相应地更改了我的 React 应用程序 尽管略有不同 我的index js的相关部分
  • 在 Eclipse 中运行时 Tomcat 主页不显示

    我在 Eclipse 中运行 Tomcat 我想查看 Tomcat 主页 但它没有显示 当我浏览时http localhost 8080 然后我收到 HTTP 404 Page Not Found 错误 这是如何引起的以及如何解决 Ecli
  • -webkit-text-fill-color:透明;无法在 Safari 7.1.7 中工作

    我有一个有几个li的ul 我在 ul 上使用这个 id list margin right auto margin left auto width 500px color black background webkit linear gra
  • 如何在jfreechart中禁用鼠标拖动缩放而不禁用mousewheellistener?

    我想通过鼠标拖动禁用缩放 绘制该矩形 但不禁用鼠标轮缩放 我在另一个主题中发现如何在将鼠标向左拖动时禁用缩放重置 restoreAutoBounds 我对如何解决这个问题感兴趣 有没有什么捷径可以做到这一点 好的 我已经通过重写 Mouse
  • 如何在 WebBrowser 控件内调用 JavaScript?

    我想像这样调用 JavaScript 函数 Goto javascript Goto DM NEW OBJECT ASPX DM CAT ID 2063 amp DM PARENT ID 2217 amp INPUTSELECTION am
  • 如何在java中使接受的套接字非阻塞

    我接受来自客户端的连接 然后将连接的套接字传递给另一个对象 但是 该套接字需要是非阻塞的 我正在尝试使用getChannel configureBlocking false 但这似乎不起作用 它需要是非阻塞的 因为下面的方法每 100 毫秒
  • WPF 没有 Visual Studio?

    在不接触 Visual Studio 或任何其他 IDE 的情况下创建 WPF 应用程序是否实用 比如说 完全在 Vim 和命令行中编码和编译 您会向尝试这样做的人推荐哪些资源 这将是possible 因为基本上 WPF 是基于 XAML
  • Openshift 中的 NGINX - NGINX 无法解析内部主机名

    当使用变量重写并代理到 nginx 容器的 proxy pass 配置中的内部 Openshift 服务时 NGINX 由于需要解析器而无法解析服务的 DNS 例如 location api set pass url http servic
  • Magento:在 list.phtml 中获取图片库

    对于已加载的产品 如何将图片库抓取到 Magento 的类别页面中 this gt getImageGallery product 不会工作 product Mage getModel catalog product gt load pro
  • Cypress,cy.visit() 尝试加载 ESOCKETTIMEDOUT 失败 [关闭]

    Closed 这个问题需要调试细节 目前不接受答案 致力于www github com cy visit 尝试加载 ESOCKETTIMEDOUT 失败 但在其他网站上没有 对我来说 通过在赛普拉斯配置中添加以下内容解决了问题 header
  • 禁用 ASP.NET-MVC3 中 unicode 字符的编码

    在我的网站上 每个文本都以 UTF 8 格式提供 由于现在每个浏览器都支持 unicode 字符 因此我想按原样使用它们 asp net 框架非常有用 它可以用数字字符引用替换任何 unicode 例如 225 供参考检查 http en
  • 自 Mac OS 10.11 El Capitan 起,具有系统完整性保护的 DYLD_LIBRARY_PATH 技巧的替代方案

    这是我所拥有的 Mac 操作系统 10 11 埃尔卡皮坦 python 2 7 12 从 python org 安装 Library Frameworks Python framework 皮查姆 2016 2 3 vtk 7 1 0 这是