我刚刚通过Homebrew安装了pygtk(很棒的工具)以及它的依赖性(包括gtk +);问题是,当我尝试在python解释器上导入gtk时,它抛出一个ImportError,当将pygtk或任何其他模块导入解释器时不会发生这种情况,我无法弄清楚是什么问题。 :S
答案 0 :(得分:1)
在OP的澄清之后,原来的答案并没有描述他的问题......虽然我认为它是相关的,它可以帮助其他人,所以我会离开它。但首先是相关部分。
在import gtk
之前,您需要致电pygtk.require
,如本教程的Getting Started部分所示。 (有关详细信息,请参阅PyGTK FAQ。)
那应该可以解决你的问题...但你只是在崩溃Fatal Python error: PyThreadState_Get: no current thread
。有很多原因你可以得到这个,但在这种情况下最有可能的是你正在运行一个C扩展(pygtk
/ gtk
/无论如何)为一个版本的Python构建不同版本的Python。 (这实际上也是covered in the PyGTK FAQ,但在这种情况下,这是CPython C扩展模块的一个更普遍的问题,而不是PyGTK特有的。)
如果你有多个Python 2.7版本(如果你有2.7.3,你肯定有两个,因为Apple是2.7.2),你必须弄清楚你有哪些,以及你用来构建哪一个pygtk
,并确保您使用同一个。
这让我们回到原来的答案,我已经留下了。
有两个原因可以解决这个问题。
首先,如果你没有安装任何额外的Python版本,除了OS X附带的版本,你可能没有阅读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
的说明,或者信息等等:
例如:
pip
Homebrew将Python软件包安装到/usr/local/lib/pythonX.Y-even,如果它正在安装Apple的Python安装。但Apple的Python安装默认不会在那里查找包。所以,你需要做这个说法。
只需在终端输入此行即可用于该终端会话的其余部分。如果你想让它永久化......好吧,有很多选择,具体取决于你想要什么。有关详细信息,请参阅this answer。
Gems, Eggs and Perl Modules和Homebrew and Python详细说明了这一点。
(这是Homebrew通常建议尽可能使用brew
的多种原因之一,而不是在python
中查找包。但是有一些例外,我很容易相信pygtk是其中之一。)
其次,如果您安装了Homebrew的Python,您可能没有正确设置PATH,因此您将软件包安装到Homebrew Python的站点软件包中,而是运行Apple Python安装。
如果您只是输入which python
并且不知道您正在运行哪一个,/usr/bin/python
应该告诉您。如果它是/usr/local/bin/python
它是Apple的;如果它是virtualenv
,那就是Homebrew的。
您也可以从Python启动横幅告诉,因为Mountain Lion附带2.7.2,而Homebrew将安装2.7.3。 (另外,IIRC,Apple使用预发布铿锵来构建他们的Python,而你用Homebrew构建的任何内容都将使用你拥有的任何clang / gcc / llvm-gcc构建,这不会是一个预发布版本......)
注意:仅仅因为你在横幅中看到“Apple”这个词并不意味着它是Apple的Python!如果你构建一个自制的Python,或者安装一个python.org Python,它将会几乎可以肯定是用Apple GCC,Apple Clang或Apple LLVM-GCC构建的。它也在Apple OS上运行。因此,“Apple”或“apple”将在任何 Python,Apple或不是Apple的横幅中出现最多三次。
对此的修复是运行您要运行的Python。例如:
/usr/local/bin/python
根据其中一个或两个安装创建一个或多个虚拟环境,并使用venv工具进行选择。/usr/bin/python
以运行Homebrew的Python,PATH
来运行Apple。 (并修改任何脚本中的shebang行以执行相同操作。)pip
变量,以确保您想要的任何一个首先出现。对于Homebrew,你需要/ usr / bin之前的/usr/local/Cellar/python/2.7.3/bin(仅用于Python)或/ usr / local / bin(用于所有内容);对于Apple来说,反过来。所有这些都适用于其他工具。许多人遇到麻烦,例如,一个安装的idle
或python
在路径中排在第一位,而另一个装置的{{1}}确实...
如果您已经安装了不同的 Python,例如,使用python.org中的安装程序,您可以轻松地两个上述问题。例如,你可以为python.org Python安装东西,但运行Apple Python,除此之外,没有人可以配置为查看Homebrew site-packages目录。