如何将Mac OS X10.9下的Python2.7升级到最新的Python3.3

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将Mac OS X10.9下的Python2.7升级到最新的Python3.3相关的知识,希望对你有一定的参考价值。

参考技术A 原来的安装目录见第2步,不过所有的python都在
/System/Library/Frameworks/Python.framework/Versions
目录中,所以最好使用下面的命令移动一下,当然不移动也可以。
但后面步骤中的某些路径需要修改下。
sudo
mv /Library/Frameworks/Python.framework/Versions/3.3
/System/Library/Frameworks/Python.framework/Versions!

如何允许 Python.app 在 Mac OS X 上设置防火墙?

【中文标题】如何允许 Python.app 在 Mac OS X 上设置防火墙?【英文标题】:How to allow Python.app to firewall on Mac OS X? 【发布时间】:2016-04-18 01:00:39 【问题描述】:

当我在 Mac 上运行 python 应用程序时,它会显示许多关于希望“Python.app”接受传入网络连接的对话框。

即使我允许它多次,它也会一次又一次地显示。

如何让它一次不显示?


编辑

我发现了这个问题: Add Python to OS X Firewall Options?

我按照公认的答案去做,但最后当我运行codesign -s "My Signing Identity" -f $(which python) 时,它说:

/usr/bin/python: replacing existing signature
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate: can't create output file: /usr/bin/python.cstemp (Operation not permitted)
/usr/bin/python: the codesign_allocate helper tool cannot be found or used

接下来怎么办?

【问题讨论】:

(Operation not allowed) 表示不允许您执行操作 - 具体而言,您不能在 /usr/bin 中创建文件,该文件实际上归 root 所有。由于您已经禁用了 SIP,您应该运行 codesignsudo 【参考方案1】:
With the OS X firewall enabled, you can remove the "Do you want the application "python" to accept incoming network connections?" message.

Create a self-signed certificate.

Open Keychain Access. Applications > Utilities > Keychain Access.
Keychain Access menu > Certificate Assistant > Create a Certificate...
Enter a Name like "My Certificate".
Select Identity Type: Self Signed Root
Select Certificate Type: Code Signing
Check the Let me override defaults box
Click Continue
Enter a unique Serial Number
Enter 7300 for Validity Period.
Click Continue
Click Continue for the rest of the dialogs
Now sign your application

  codesign -s "My Certificate" -f $(which python)

In the dialog that appears, click "Allow".

Note that when using a virtual environment, you need to activate the virtual environment before running this command.

【讨论】:

这个答案有效。无需禁用 SIP。一侧节点是codesign -s "My Certificate" -f $(which python) 在我这边工作得不是很好。解决方法是双击钥匙串应用程序中的证书,展开信任部分,选择Code Signing下的始终信任【参考方案2】:

我从 python.org 安装了 Python 3.6,我遇到了类似的问题。我反复尝试对 python 二进制文件 /usr/local/bin/python3、/Library/Frameworks/Python.framework/Versions/3.6/bin/python3 等进行自签名,但我会继续获得 MacOS Firewall Deny/允许弹出窗口。

最后,自签名位于 /Library/Frameworks/Python.framework/Versions/3.6/Resources 的应用程序成功了:

codesign --force --sign "My Signing Identity" /Library/Frameworks/Python.framework/Versions/3.6/Resources/Python.app

我正在使用 MacOS Mojave 10.14.1,因为它物有所值。

【讨论】:

如果你在这里,我可能会亲吻你。好吧,也许不是。 @mr-howdy,我收到错误:error: The specified item could not be found in the keychain - 你能帮忙吗? @Taz 您可以在下面关注@Prasad 的回答。创建钥匙串证书。之后您还可以双击您创建的证书,展开信任,在Code Signing 选项中选择始终信任 这家伙就在这里,总统先生,给他一枚勋章【参考方案3】:

上面@mr-howdy 的答案略有补充。对于 Python 3.7,我必须使用:

codesign --force --sign "My Certificate" /Library/Frameworks/Python.framework/Versions/3.7/Resources/Python.app/Contents/MacOS/Python

注意添加到路径中的额外Contents/MacOS/Python

【讨论】:

非常感谢您的回答,这对我有帮助。【参考方案4】:

创建自签名证书。

打开钥匙串访问。应用程序 > 实用程序 > 钥匙串访问。 钥匙串访问菜单 > 证书助手 > 创建证书... 输入“我的证书”之类的名称。 选择身份类型:自签名根 选择证书类型:代码签名 选中让我覆盖默认值框 点击继续 输入唯一的序列号(从 1 到 2147483647) 输入 7300 作为有效期。 点击继续 点击继续查看其余对话框

现在签署您的申请,通过以下方式:

在终端运行codesign -s --deep "My Certificate" -f $(which python) 在出现的对话框中,点击“允许”。

打开 Keychains 应用,搜索您的证书, 右键单击“获取信息” 展开信任部分,在代码签名下选择“始终信任”

注意,使用虚拟环境时,需要先激活虚拟环境才能运行此命令。

【讨论】:

这是一个很好的答案,因为它经历了创建代码签名证书的步骤。但是,我没有使用$(which python),而是使用了路径,因为我的 python3 是别名。 在我的情况下,“--deep”未被识别,但除此之外,这是一个很好的答案。【参考方案5】:

显然 El Capitan 有一个叫 System Integrity Protection 的东西,它可以防止任何用户(甚至是 root)修改某些操作系统资源。例如在这种情况下的 /usr/bin 目录,你有 python 可执行文件。要对 python 二进制文件进行自签名,您可以通过在恢复模式下重新启动您的 mac(按住 CMD+R 重新启动)然后在终端中键入以下内容来禁用 SIP:

csrutil disable

然后重新启动到常规 OSX,并按照步骤对 python 进行自签名并执行:

codesign -s "My Signing Identity" -f $(which python)

最后重新启动进入恢复模式,并重新启用 SIP:

csrutil enable

【讨论】:

谢谢。如果它可以这样工作,我会说多么可怕!它看起来像黑客。确实,我不知道为什么软件(如 python 库)与系统环境不匹配。这对普通开发者来说并不好。 发生的情况是,您从 python 中继承了 El Capitan 之前的版本。您可以做的另一件事是简单地重新安装 python 用户 brew。看看这个:apple.stackexchange.com/questions/209572/… 这个:github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/… 我已尝试重新启动进入恢复模式。但这需要管理员密码。因为公司的电脑,我可以登录。【参考方案6】:

您可以在系统偏好设置->安全和隐私中允许 python 的传入连接。单击防火墙选项卡,然后单击防火墙选项按钮(您可能需要先进行身份验证/解锁)。您应该会在某处看到 python 列出,您可以选择允许传入连接。这至少解决了我的问题。

【讨论】:

这只能工作一次。 OP 要求的安全对话框仍然弹出 嗯。对我来说,这阻止了对话框再次弹出。但也许我没有做任何事情来触发它?运行 osx 10.14.5。

以上是关于如何将Mac OS X10.9下的Python2.7升级到最新的Python3.3的主要内容,如果未能解决你的问题,请参考以下文章

如何检测 NaN 在哪里传递给 Mac OS X 10.9 上的 CoreGraphics API

如何在 mac os x (10.9) 上的 python 中安装 libgpuarray 和 clBLAS?

如何在 Mac OS X 10.9 上设置 JAVA_HOME 环境变量?

Mac OS X 10.9 后无法安装 PIL

Mac OS X 10.9 - 设置永久环境变量

使用自制软件在 Mac OS X 10.9 中构建 OpenCV_Python