【问题标题】:Swift REPL throws python error?Swift REPL 抛出 python 错误?
【发布时间】:2014-11-29 15:32:39
【问题描述】:

当我尝试使用 swiftxcrun swift 运行 swift REPL 时,我收到以下 Python 错误:

Hristos-MacBook-Pro:~ Hristo$ swift

致命的 Python 错误:PyThreadState_Get:没有当前线程

中止陷阱:6

看起来 Swift 的 REPL 是用 Python 编写的。我最近安装了pip,它可能损坏了一些东西。我正在使用 Xcode 6.1 (A1052d) 和 OS X Yosemite。可能是什么情况?

【问题讨论】:

  • 它肯定是在运行 Apple 的 Swift REPL 而不是一些 python 程序吗?运行which swift 的输出是什么?
  • 上面写着/usr/bin/swiftxcrun swift 给出了相同的 python 错误。

标签: python xcode swift read-eval-print-loop


【解决方案1】:

我刚刚遇到了同样的问题。上面的答案给了我一个非侵入性解决方案的提示(在我的例子中,我在路径的头部有 fink 的 python)

% PATH=/usr/bin:$PATH
% swift

此解决方案基于以下观察。 Fink(我认为 Macports 和可能的其他第三方 python 提供商)将他们的 bin 目录放在路径的开头。这可以通过在命令行中调用 python 来查看:

% which python
/sw/bin/python

这就是我遇到的问题导致我寻找解决方案的地方:

% swift
Fatal Python error: PyThreadState_Get: no current thread
[1]    19219 abort      swift

通过在 shell 级别更改 $PATH 变量,可以避免问题,而无需更改未来 shell 会话的默认条件:

% PATH=/usr/bin:$PATH
% which python
/usr/bin/python

所以现在可以了:

% swift
Welcome to Swift!  Type :help for assistance.
   1>

一个更持久的解决方案(没有永久更改 $PATH 变量元素的顺序)可能是在一个 shell 点文件中包含以下别名(或等效函数):

alias swift="PATH=/usr/bin:$PATH swift"

【讨论】:

  • @smci。我不同意。这提供了一种不会永久更改计算机配置的替代方法。
  • 是否迅速从系统路径中获取其 Python ......你需要解释原因。然后,如果我的密切投票是错误的,我会撤回它。
  • 这是证据:zsh-% which python /sw/bin/python zsh-% swift 致命 Python 错误:PyThreadState_Get: no current thread [1] 19219 abort swift zsh-% PATH=/usr /bin:$PATH zsh-% which python /usr/bin/python zsh-% swift 欢迎使用 Swift!输入 :help 寻求帮助。 1>
【解决方案2】:

我更改了活动的 python 版本(之前通过 macports 安装了 python 2.7)并且它工作了:

sudo port select python python33

【讨论】:

    猜你喜欢
    • 2014-08-22
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多