在OS X上使用python导入gtk时出错
我刚刚通过自制软件(很棒的工具)及其附属软件(包括gtk+)安装了pygtk;问题是,当我尝试在python解释器上导入gtk时,它会抛出一个ImportError,这在将pygtk或任何其他模块导入解释器时都不会发生,我无法找出问题所在S在OP澄清后,最初的答案没有描述他的问题……尽管我认为这是相关的,而且可能会帮助其他人,所以我将留下它。但首先是相关部分 在导入gtk之前,需要调用在OS X上使用python导入gtk时出错,python,gtk,pygtk,homebrew,Python,Gtk,Pygtk,Homebrew,我刚刚通过自制软件(很棒的工具)及其附属软件(包括gtk+)安装了pygtk;问题是,当我尝试在python解释器上导入gtk时,它会抛出一个ImportError,这在将pygtk或任何其他模块导入解释器时都不会发生,我无法找出问题所在S在OP澄清后,最初的答案没有描述他的问题……尽管我认为这是相关的,而且可能会帮助其他人,所以我将留下它。但首先是相关部分 在导入gtk之前,需要调用pygtk.require,如本教程部分所示。(有关详细信息,请参阅。) 这应该可以解决您的问题…但是您遇到了致
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
- 使用
基于其中一个或两个安装创建一个或多个虚拟环境,并使用venv工具进行选择virtualenv
- 始终使用完整路径,例如键入
运行自制的python,键入/usr/local/bin/python
运行苹果的python。(并修改任何脚本中的shebang行以执行相同的操作。)/usr/bin/python
- 更改
变量,以确保您想要的哪个先到。对于自制,您需要在/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