64

我在 OSX 10.9 上的 Python 3.3.2 中遇到了一个问题,如果我在终端窗口中打开 Python,无论这两个命令是什么,它都会在我输入的第二行之后以“分段错误:11”退出。例如,如果我输入:

>>> for x in range(1000): print(x)

这工作正常,但如果我输入:

>>> for x in range(1000):
...     print(x)

然后当我在第二行按 enter 时出现错误。我也可以运行超过 2 行的脚本而不会出现任何问题。

我今天下午更新到 OSX 10.9,所以我怀疑可能是这样。

但是,我最近刚刚安装了 IPython(以及其他几个包)并且在过去几天一直在使用它,所以它可能是我最近安装的其他东西。我在运行 configure.py 的地方安装 PyQt 时尝试了几次不成功,但随后“make”命令失败,我也对此表示怀疑。

我尝试重新安装 Python,但没有解决问题。IPython 和 IDLE 都可以正常工作。我只是担心潜在的问题是什么。

4

4 回答 4

50

这是 python 中 readline 兼容性中的一个错误,与 OSX10.9 中引入的更改有关。本周末,发布了 Python2.7.6 和 Python3.3.3 的候选版本,修复了这个错误。下载链接如下。

http://python.org/download/releases/2.7.6/

http://python.org/download/releases/3.3.3/

这是问题,引用 Ned Deily 在python-dev email list上写的内容。

周二,Apple 发布了 OS X 10.9(又名 Mavericks)。已经引起了很多人的兴趣,部分原因是 Apple 已经免费提供了它,并且让拥有 10.8、10.7 和(大多数)10.6 系统的用户可以轻松地直接升级到 10.9。不幸的是,我们在 OS X 10.9 上的当前维护版本(3.3.2 和 2.7.5)存在问题,需要尽快发布新的维护版本。

一个很关键,因为它会导致解释器在交互模式下运行时崩溃(http://bugs.python.org/issue18458)。该问题是由于 libedit 的 readline 兼容性层中长期存在的兼容性问题,上游最终修复了该问题,Apple 现在已在 10.9 中发布。因为 python.org 安装程序动态链接到 libedit,所以当用户以交互方式键入第二个命令时,readline.c 中针对历史索引中原始设计缺陷的原始解决方法现在会导致 10.9 出现段错误。不好。Ronald 设计了一个修复程序,允许 readline.so 在运行时检测并使用任一版本的 libedit,以便我们继续在多个 OS X 版本之间保持二进制兼容性。该修复程序已在 3.4.0 alphas 中发布并向后移植到 3.3 和 2.7 分支,等待在那里发布。仅在过去 12 小时内,用户报告的问题至少有四次重复。我已经更新了原始问题以明确提及 10.9,现在它不再受 NDA 保护,并为没有经验的用户提供可下载的脚本,以通过“删除”readline.so 来解决问题。据推测,随着消息的传出,打开的重复问题将会减少,但影响仍然存在。

于 2013-10-28T07:46:30.820 回答
35

升级到 OS X 10.9 并使用 Python 网站上提供的补丁后,我遇到了这个问题:http: //bugs.python.org/issue18458#msg201087

要使用它,请在 Terminal.app(或其他 shell)中打开一个终端会话,然后输入:

curl -O http://bugs.python.org/file32324/patch_readline_issue_18458.sh
openssl sha1 patch_readline_issue_18458.sh
# the digest should be 7cb0ff57820a027dd4ca242eb2418930f8f46b4c

然后
sh ./patch_readline_issue_18458.sh

如果有提示,请输入密码

于 2013-11-25T15:02:52.447 回答
2

我有这个问题。将我的 csv 解析器中的 更改chunksize为 100 消除了错误。

于 2015-01-21T04:38:01.680 回答
1

我遇到了类似的“分段错误 11”错误,但对我来说它使用的是 mercurial(hg)

这是尝试使用通过 .mpkg 安装程序安装的 Python 2.7.8 和 pip install mercurial On OS X 10.9.5

我认为更新到 2.7.8 可以解决这个问题,但似乎 mercurial 仍在寻找 System/Library/Frameworks/Python.framework/Versions/2.7

即使在尝试遵循这个稍微不明智的建议之后,事情仍然没有奏效。我会跑

hg init
hg add *
hg commit -m ...
hg status

会得到“分段错误 11”

堆栈跟踪的前几行指向这一点:

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   ???                             000000000000000000 0 + 0
1   osutil.so                       0x00000001095ef768 listdir + 313
2   org.python.python               0x0000000109261b35 PyEval_EvalFrameEx + 14712
3   org.python.python               0x000000010925e093 PyEval_EvalCodeEx + 1641

最后,我的解决方案似乎来自(重新)使用自制软件安装 python来获得 2.7.8 版本(截至 2014 年 12 月)

然后我用 brew install mercurial 重新安装了 mercurial,这似乎已经解决了导致这种情况的任何依赖项。我希望我能更好地理解 Seg 故障发生了什么,但无法深入了解它。

我仍然有的最好猜测是,尽管 2.7.8 已正确安装并且 usr/local/bin 位于路径的第一位,但 mercurial 仍在引用系统 python

/usr/local/bin:usr/local/git/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/Library/Frameworks/Python.framework/Versions/3.4/bin:/usr/bin: /bin:/usr/sbin:/sbin:/usr/local/bin:~/Develop:/usr/local/git/bin: 没有这样的文件或目录

所以,我的建议是用 brew 更新 python 安装,然后重新安装你依赖的任何其他包。

于 2014-12-04T06:48:18.840 回答