在OS X上使用python导入gtk时出错

在OS X上使用python导入gtk时出错,python,gtk,pygtk,homebrew,Python,Gtk,Pygtk,Homebrew,我刚刚通过自制软件(很棒的工具)及其附属软件(包括gtk+)安装了pygtk;问题是,当我尝试在python解释器上导入gtk时,它会抛出一个ImportError,这在将pygtk或任何其他模块导入解释器时都不会发生,我无法找出问题所在S在OP澄清后,最初的答案没有描述他的问题……尽管我认为这是相关的,而且可能会帮助其他人,所以我将留下它。但首先是相关部分 在导入gtk之前,需要调用pygtk.require,如本教程部分所示。(有关详细信息,请参阅。) 这应该可以解决您的问题…但是您遇到了致

我刚刚通过自制软件(很棒的工具)及其附属软件(包括gtk+)安装了pygtk;问题是,当我尝试在python解释器上导入gtk时,它会抛出一个ImportError,这在将pygtk或任何其他模块导入解释器时都不会发生,我无法找出问题所在S

在OP澄清后,最初的答案没有描述他的问题……尽管我认为这是相关的,而且可能会帮助其他人,所以我将留下它。但首先是相关部分

在导入gtk之前,需要调用
pygtk.require
,如本教程部分所示。(有关详细信息,请参阅。)

这应该可以解决您的问题…但是您遇到了
致命的Python错误:PyThreadState\u Get:没有当前线程
。有很多原因可以解释,但在这种情况下,最有可能的原因是您正在运行一个C扩展(
pygtk
/
gtk
/无论什么),该扩展是针对不同版本的Python为一个版本的Python构建的。(这实际上也是一个问题,但在本例中,这是CPython C扩展模块的一个更普遍的问题,而不是PyGTK特有的问题。)

如果你有多个Python 2.7版本(如果你有2.7.3,你肯定有两个,因为苹果是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中,即使它是为苹果的Python安装而安装的。但是苹果的Python安装默认情况下不会在那里寻找软件包。所以,你需要照上面说的做

只要在终端上键入这一行,就可以在该终端会话的其余部分工作。如果你想让它永久化…嗯,有很多选择,这完全取决于你想要什么。有关详细信息,请参阅

这在和中有更详细的解释

(这就是为什么Homebrew通常建议尽可能使用
pip
,而不是在
brew
中查找软件包的多个原因之一。但也有一些例外,我很容易相信pygtk就是其中之一。)


第二,如果您安装了自制Python,您可能没有正确设置路径,因此您正在将软件包安装到自制Python的站点软件包中,然后运行Apple Python安装

如果您只是键入
python
而不知道正在运行哪一个,那么
哪一个python
应该告诉您。如果它是
/usr/bin/python
它是苹果的;如果是
/usr/local/bin/python
,那就是自制的

您还可以从Python startup横幅中看出,因为Mountain Lion附带了2.7.2,而Homebrew将安装2.7.3。(同样,IIRC,Apple使用了预发布版本的clang来构建Python,而使用自制软件构建的任何东西都将使用您拥有的clang/gcc/llvm-gcc来构建,而不是预发布版本…)

注意:仅仅因为你在横幅的某个地方看到“苹果”一词并不意味着它是苹果的Python如果您构建一个自制Python,或者安装一个Python.org Python,那么几乎可以肯定它将使用Apple GCC、Apple Clang或Apple LLVM-GCC构建。它也在苹果操作系统上运行。因此,“苹果”或“苹果”将在任何Python的横幅中出现最多三次,不管是不是苹果

解决方法是运行您想要运行的Python。例如:

$ 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
  • 使用
    virtualenv
    基于其中一个或两个安装创建一个或多个虚拟环境,并使用venv工具进行选择
  • 始终使用完整路径,例如键入
    /usr/local/bin/python
    运行自制的python,键入
    /usr/bin/python
    运行苹果的python。(并修改任何脚本中的shebang行以执行相同的操作。)
  • 更改
    路径
    变量,以确保您想要的哪个先到。对于自制,您需要在/usr/bin之前使用/usr/local/cillar/python/2.7.3/bin(仅用于python)或/usr/local/bin(用于所有内容);对苹果来说,情况正好相反
  • 将Python框架bin目录添加到路径中,这样您就可以独立于常规二进制文件来操作它们的顺序。(这与自制Python无关,因为Cell目录也有同样的用途。但它也可以用于其他第三方Python安装。)
所有这些都适用于其他工具。许多人会遇到麻烦,例如,一个安装的
pip
idle
在路径中排在第一位,而另一个安装的
python
则会



如果您安装了不同的Python,例如,通过使用Python.org上的安装程序,您可能很容易遇到上述两个问题。例如,您可能正在为python.org python安装stuff,但运行的是Apple python,除此之外,任何一个都不能配置为查看自制站点包目录。

您确定已将
pygtk
安装到正在运行的同一python中吗?另外,请注意,Brew包清楚地显示(当你
info
it,
install
it等)“对于非自制Python,你需要这样修改你的PYTHONPATH:…”。除非你使用的是自制Python,否则你会这样做吗?谢谢你的回答;我正要回复你的评论,我已经添加了
导出PYTHONPATH=/usr/local/lib/python2.7/站点包:$PYTHONPATH