0

我刚刚通过 Homebrew(很棒的工具)及其依赖项(包括 gtk+)安装了 pygtk;问题是当我尝试在 python 解释器上导入 gtk 时,它会抛出一个 ImportError,在将 pygtk 或任何其他模块导入解释器时不会发生这种情况,我不知道出了什么问题。:S

4

1 回答 1

1

在OP澄清之后,原始答案没有描述他的问题......虽然我认为它是相关的,它可能会帮助其他人,所以我会离开它。但首先,相关部分。

在您可以之前import gtk,您需要调用pygtk.require,如教程的入门部分所示。(有关更多详细信息,请参阅PyGTK 常见问题解答。)

那应该可以解决您的问题……但是您只是在崩溃Fatal Python error: PyThreadState_Get: no current thread. 有很多原因可以得到这个,但在这种情况下,最有可能的是你正在运行一个 C 扩展(pygtk// gtkwhatever),它是为一个版本的 Python 针对不同版本的 Python 而构建的。(这实际上也包含在 PyGTK FAQ中,但在这种情况下,它是 CPython C 扩展模块的一个更普遍的问题,而不是 PyGTK 特定的问题。)

如果你有多个 Python 2.7 版本(如果你有 2.7.3,你肯定有两个,因为 Apple 是 2.7.2),你必须弄清楚你有哪些,以及你曾经构建的那个pygtk,并制作确保你从同一个使用它。

这使我们回到了我留在下面的原始答案。


出现此问题的原因有两个。


首先,如果除了 OS X 附带的 Python 版本之外,您还没有安装任何额外的 Python 版本,那么您可能没有阅读安装时brew打印出来的说明pygtk或信息等:

例如:

$ brew info pygtk
pygtk: stable 2.24.0
...
==> Caveats
For non-Homebrew Python, you need to amend your PYTHONPATH like so:
  export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH

Homebrew 将 Python 包安装到 /usr/local/lib/pythonX.Y 中——即使它是为 Apple 的 Python 安装而安装的。但是 Apple 的 Python 安装默认不会在那里寻找包。所以,你需要按照上面所说的去做。

只需在终端上键入此行即可用于该终端会话的其余部分。如果你想让它永久化……嗯,有很多选择,具体取决于你想要什么。有关详细信息,请参阅此答案

这在Gems、Eggs 和 Perl 模块以及Homebrew 和 Python中有更详细的解释。

(这是 Homebrew 通常建议pip尽可能使用而不是在brew.


其次,如果您安装了 Homebrew 的 Python,您可能没有正确设置 PATH,因此您将包安装到 Homebrew Python 的站点包中,然后运行 ​​Apple Python 安装。

如果您只是在打字python并且不知道您在运行哪一个,which python应该告诉您。如果/usr/bin/python是苹果的;如果是/usr/local/bin/python,那就是 Homebrew 的。

您也可以从 Python 启动横幅中看出,因为 Mountain Lion 附带 2.7.2,而 Homebrew 将安装 2.7.3。(此外,IIRC,Apple 使用预发布 clang 来构建他们的 Python,而您使用 Homebrew 构建的任何东西都将使用您拥有的任何 clang/gcc/llvm-gcc 构建,这不会是预发布版本......)

注意:仅仅因为您在横幅的某处看到“Apple”一词并不意味着它是 Apple 的 Python!如果你构建一个 Homebrew Python,或者安装一个 python.org Python,它几乎肯定会使用 Apple GCC、Apple Clang 或 Apple LLVM-GCC 构建。它也在 Apple 操作系统上运行。因此,“Apple”或“apple”将在任何Python的横幅中最多出现 3 次,无论是否为 Apple。

解决此问题的方法是运行您要运行的 Python。例如:

  • 用于virtualenv基于一个或两个安装创建一个或多个虚拟环境,并使用 venv 工具进行选择。
  • 始终使用完整路径——例如,键入/usr/local/bin/python运行 Homebrew 的 Python,/usr/bin/python运行 Apple 的。(并修改任何脚本中的 shebang 行以执行相同的操作。)
  • 更改您的PATH变量以确保您想要的第一个出现在第一位。对于 Homebrew,您需要 /usr/local/Cellar/python/2.7.3/bin(仅适用于 Python)或 /usr/local/bin(适用于所有内容)在 /usr/bin 之前;对于苹果来说,反过来。
  • 将 Python 框架 bin 目录添加到 PATH,这样您就可以将它们的顺序与通用二进制文件分开操作。(这与 Homebrew Python 并不真正相关,因为 Cellar 目录具有相同的目的。但它对于其他第三方 Python 安装很有用。)

所有这些都适用于其他工具。许多人遇到麻烦,例如,一个安装pipidle在路径中排在第一位,而另一个安装python则...</p>


If you've installed a different Python, e.g., by using the installers from python.org, you could easily have both of the above problems. For example, you could be installing stuff for python.org Python, but running Apple Python, and on top of that, neither one may be configured to look in the Homebrew site-packages directory.

于 2013-03-15T01:04:51.383 回答