【问题标题】:Allow Python.app on El Capitan (OS X)在 El Capitan (OS X) 上允许 Python.app
【发布时间】:2016-12-30 08:45:20
【问题描述】:

我在虚拟环境中使用python 可执行文件。我尝试按照here 的描述做整个codesign 的事情,包括创建证书等。该命令有效,但结果保持不变。我认为它曾经可以在以前版本的 OS X 上工作,但我目前使用的是最新的 El Capitan 版本(10.11.6),它不再工作了。关于如何解决它的任何想法?

编辑:我确实看到了this 解决方案,但是由于我的python 是在虚拟环境中,我不确定它是否适用,除非你们另有说明...

编辑 2:我尝试了上面的解决方案,但没有奏效。 我应该提到我正在对 virtualenv 中的 python 可执行文件进行代码签名

编辑 3:最终为我工作的事情是将 flask 升级到当前版本(使用 pip install flask --upgarde),并使用 export FLASK_APP=app.py; flask run 而不是 @ 运行应用程序987654330@。当您使用flask run 运行应用程序时,不再弹出烦人的对话框。据我所知,不需要代码设计。希望这对某人有所帮助。

【问题讨论】:

  • 这不是一个真正的 python 特定问题。当我运行服务器应用程序时,我的 IDE 会弹出相同的消息
  • @cricket_007:但它不是特定于 IDE 的。如果我从终端运行应用程序,我会收到相同的消息。
  • 而且我认为您的 virtualenv 不包含在 Python.app Bundle 中,因此您必须从 virtualenv 目录中添加 python 二进制文件
  • 我也不是说它是特定于 IDE 的。我可以在任何需要打开端口的地方得到它,基本上
  • @cricket_007:我确实从 virtualenv 目录中添加了 python 二进制文件...也许我需要添加原始 python Bundle?

标签: python macos


【解决方案1】:

为什么会这样?

所以 El Capitan 中的 python 可执行文件产生了 .../Python.framework/Versions/2.7/Resources/Python.app + 一些额外的魔法。问题是框​​架包没有自己的签名,它使用父应用程序二进制文件的签名。

如何检查?

从非 Apple-maintained-source-that-might-steal-your-soul 安装应用程序后要检查的第一件事是检查您正在安装的应用程序是否受限

ls -lO /System/Library/Frameworks/Python.framework/Versions/2.7/
csrutil status

如果它是restricted,只要启用SIP,它就不能被删除(即使是root)。

怎么办?

因此,您必须尝试几种不同的选择:

  • Pre-Option 0 - 我认为您已经这样做了:我不确定您是如何维护虚拟环境的,所以请确认您正在完成该过程,例如 @ 987654322@。

  • 选项 1 - 安全,但可能不起作用:使用 brew 维护您的可执行文件,使用 pip 维护您的包。这通常会立即解决问题,但我不确定你的情况是什么:)

  • 选项 2 - 危险,但会起作用CheckDisable SIP。除非您在由具有多年安全经验的 IT 人员团队保护的环境中工作,否则我不建议您这样做。此选项将解决问题,但您基本上摆脱了其中一个安全层...... GL!

更新 1

还有另一种选择(但不确定您是否尝试过)

  • 选项 1.5 - 我不知道它是否会起作用:尝试 选项 1 (csrutil disable),重新启动,通过 codesign 进程,重新启动,并撤消 选项 1 (csrutil enable)。我从未尝试过,但这并不意味着你不能:))) Credit goes to this SO answer here

【讨论】:

  • 我刚刚检查过,我的 python 框架是不受限制的(哇)。您对 pre-option-0 的看法是正确的。而且我已经尝试过您的“更新 1”(如我的编辑 2 中所述)...我也安装了 python 版本查看 brew。我试图用 brew 可执行文件替换我的可执行文件,对它们进行共同设计,但仍然不行......
  • 如果您使用的是brew,请确保您使用的是/usr/local/... 可执行文件。在你的脚本中确保 shebang 设置为#!/usr/bin/env python。也许(只是也许)您正在签署一个二进制文件,但使用的是不同的?
  • 我从/usr/local/bin... 复制了可执行文件,我的shebang 指向我的虚拟环境#!/Users/<blah>/Envs/<env>/bin/python 中的可执行文件。我确保在/usr/local/bin/python3.5 中对虚拟环境可执行文件和原始可执行文件进行了共同设计
  • 谢谢@RafazZ。真是个烦人的问题
  • 找到了解决方法。事实证明,如果我将flask 升级到当前版本并使用flask run 而不是python app.py 运行应用程序,我不会得到烦人的对话框。鉴于您为帮助我所做的努力,我会将您的答案标记为正确。再次感谢。
猜你喜欢
  • 2016-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 2016-04-29
  • 2018-05-02
相关资源
最近更新 更多