2013-03-15 65 views
0

我刚通过Homebrew(真棒工具)以及它的依赖(包括gtk +)安装pygtk;事情是当我尝试导入GTK的python解释器时,它会引发一个ImportError,导入pygtk或任何其他模块时不会发生ImportError,我无法弄清楚什么是错的。 :S在OS X上导入gtk与Python的错误

+0

你确定你安装了'pygtk'到你正在运行的同一个Python吗? – abarnert 2013-03-15 00:48:28

+0

另外,请注意Brew包清楚地说(当你'info','install'等等)“对于非自制Python,你需要像这样修改你的PYTHONPATH:...”。除非你使用Homebrew Python,你是否这样做? – abarnert 2013-03-15 00:49:47

回答

1

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

在您可以import gtk之前,您需要拨打pygtk.require,如本教程的Getting Started部分所示。 (欲了解更多详情,请参阅PyGTK FAQ。)

这应该可以解决您的问题......但您只是与Fatal Python error: PyThreadState_Get: no current thread一起崩溃。有很多原因可以解决这个问题,但在这种情况下最可能的情况是您正在运行针对不同版本的Python为一个版本的Python构建的C扩展(pygtk/gtk/whatever)。 (这实际上也是covered in the PyGTK FAQ,但在这种情况下,这是CPython C扩展模块的一个更普遍的问题,并不是PyGTK特有的。)

如果你有多个Python 2.7版本(如果你有2.7.3,非常肯定有两个,因为苹果的是2.7.2),你必须弄清楚你拥有哪一个,以及哪一个你用来构建pygtk,并确保你使用它来自同一个。

然后我们回到原来的答案,我已经在下面留下了。


有两个原因可以让你有这个问题。


首先,如果您还没有安装,除了与OS X附带的那些额外的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 

家酿安装Python包到/usr/local/lib/pythonX.Y-even如果它安装苹果的Python安装。但是默认情况下,Apple的Python安装不会在那里查找软件包。所以,你需要这样做。

只要在终端上输入这一行,该终端会话的其余部分将工作。如果你想让它永久......好吧,有很多选择,具体取决于你想要的东西。有关详细信息,请参见this answer

这在Gems, Eggs and Perl ModulesHomebrew and Python更详细地解释。 (这是为什么Homebrew通常建议尽可能使用pip而不是在brew中寻找软件包的多种原因之一,但也有一些例外,我很容易相信pygtk就是其中之一。)


第二,如果你安装了自制的Python中,你可能没有你的PATH树立正确的,所以你在安装包到家酿Python的网站包,但随后运行苹果Python安装代替。

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

您还可以从Python启动横幅中知道,因为Mountain Lion自带2.7.2,而Homebrew将安装2.7.3。 (另外,IIRC,苹果公司使用了一个预发布铛来构建他们的Python,而用Homebrew构建的任何东西都将使用您拥有的任何clang/gcc/llvm-gcc构建,而这不会是预发行版本...)

注意:仅仅因为您在横幅中的某处看到“Apple”这个词并不意味着它就是Apple的Python!如果您构建自制Python,或者安装python.org Python,它几乎肯定会使用Apple GCC,Apple Clang或Apple LLVM-GCC构建。它也在Apple OS上运行。因此,“苹果”或“苹果”会在任何 Python,苹果或不是苹果的横幅中出现三次。

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

  • 使用virtualenv来创建基于一个或两个安装一个或多个虚拟环境,并从中挑选使用VENV工具。
  • 始终使用完整路径 - 例如,输入/usr/local/bin/python来运行Homebrew的Python,/usr/bin/python来运行Apple's。 (并修改任何脚本中的shebang行来做同样的事情。)
  • 更改您的PATH变量以确保首先选择您想要的任何一个。对于Homebrew,您需要在/ usr/bin之前安装/usr/local/Cellar/python/2.7.3/bin(仅用于Python)或/ usr/local/bin(用于所有内容);对于苹果,反过来说。
  • 将Python框架bin目录添加到PATH中,以便您可以与常规二进制文件分开操作它们的顺序。 (这个和Homebrew Python没什么关系,因为Cellar目录服务的目的相同,但是它可以用于其他第三方Python安装。)

所有这些都适用于其他工具。很多人陷入了困境,具有例如,一个安装的pipidle放在第一位的路径,而不同的安装的python呢......


如果你已经安装了不同的Python,例如,通过使用来自python.org的安装程序,你可以很容易地有上述问题。例如,您可以为python.org Python安装东西,但运行Apple Python,并且最重要的是,也不能将其配置为查看Homebrew站点包目录。

+0

感谢您的回答;我正准备回复您的意见,我在.profile文件中添加了export PYTHONPATH =/usr/local/lib/python2.7/site-packages:$ PYTHONPATH'行,所以我认为这不是路径问题否则它不会在解释器中导入pygtk)。 – Alfageme 2013-03-15 01:16:21

+0

行动中,我不小心打进了;我想说我正在运行Apple Build;但版本是2.7.3(正如它出现在横幅中)这可能是问题? 我在'import gtk'这行'pygtk.require(“2.0”)''''然后导入gtk;那样的解释器导致我这个错误:'致命的Python错误:PyThreadState_Get:没有当前线程'任何想法? – Alfageme 2013-03-15 01:22:03

+0

首先,如果你运行的是2.7.3,你不会运行苹果的版本。 Apple不分发2.7.3。 (当然,你正在运行一个由苹果公司构建的gcc/llvm-gcc/clang构建的Python,并且在苹果公司的操作系统上运行,所以你仍然可以在旗帜中看到他们的名字一次或两次,但这就是为什么我给了如果你不知道你正在运行哪个Python,那么第一步就是找到它。 – abarnert 2013-03-15 01:29:36