在Mac OS X中安装PyGTK

在Mac OS X中安装PyGTK

Jerry JhoJerry Jho

easy_install pygtk ?

真的没那么简单。=================================================================================================================================================================================================================================================================

在PyGTK的官网(PyGTK)上写着:

PyGTK applications are truly multiplatform and they're able to run, unmodified, on Linux, Windows, Mac OS X and other platforms.

作为Linux的常用组件,PyGTK的最佳支持是各种Linux发行版,只需要在各自的软件中心或者包裹管理器中搜索pygtk,一键安装。包您满意。

其次是Windows。PyGTK提供了ALL-IN-ONE package,下载之后一路Next,包您满意。

没有“再次”了。PyGTK 的官网并没有明确的对Mac OS X提供支持,呵呵。

凡Linux文化圈里的东东,若想做到Mac OS X,第一时间应该想到Homebrew(Homebrew — The missing package manager for OS X) 对不对?

$ brew install pygtk

安装非常迅速。Homebrew的repo里面已经有预编译好的pygtk了呢,开森。

OK,pygtk-demo走起:

$ python /usr/local/Cellar/pygtk/2.24.0/lib/pygtk/2.0/pygtk-demo.py 

卡了好几分钟什么都木有出现……

好了大概猜到是怎么回事了。需要安装并启动XQuartz(xquartz.macosforge.org/)这个东西安装包60M,安装后占用160M+的空间。

这是因为Homebrew的图形界面应用程序依然是基于X11的。如果想看脸,装X11 Server先。好了终于可以运行了……

字体模糊之类的先不说了。Homebrew方案的问题在于X11这个累赘。自从Mac OS X 10.5之后系统就不自带X11了,也就是说你用PyGTK写一个几k的小程序,需要携带十几M的GTK(这个没办法了)和一个几十M的X11(这个就过分了)

我们需要的是原生Mac OS X的界面。

幸好GTK本身对Mac OS X原生Quartz提供了支持。GTK提供了专门的项目jhbuild用于下载、编译GTK模块,也就是说它提供了一个包管理器和一个编译环境。

在AppStore安装好XCode后,首先清理 ~/.bash_profile的PATH变量防止HomeBrew的干扰。安装好jhbuild后可以再还原回来。如果你的wget工具HomeBrew安装的,可以新开一个shell专门用于下载。

$ wget http://git.gnome.org/browse/gtk-osx/plain/gtk-osx-build-setup.sh
$ sh gtk-osx-build-setup.sh

jhbuild会安装在~/.local/bin下面,并需要你指定一个gtk的根目录。一般选~/gtk。

使用jhbuild安装必要的包:

$ export PATH=~/.local/bin:$PATH
$ jhbuild bootstrap
$ jhbuild build meta-gtk-osx-bootstrap
$ jhbuild build meta-gtk-osx-core
$ jhbuild build gtk-doc
$ jhbuild build libpng
$ jhbuild build libjpeg
$ jhbuild build libtiff

安装gtk-doc时如果遇到错误,选

[2] Ignore error and continue to install

安装Quartz主题:

$ jhbuild build gtk-quartz-engine

由于代码与XCode的gcc不兼容,编译过程中会出现错误:

quartz-style.c:1573:45: error: variable 'height' is uninitialized when used here
      [-Werror,-Wuninitialized]
      item_rect = CGRectMake (x1, y, x2-x1, height);
                                            ^~~~~~
quartz-style.c:1558:25: note: initialize the variable 'height' to silence this warning
      gint width, height;
                        ^
                         = 0
1 error generated.
make[2]: *** [quartz-style.lo] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
*** Error during phase build of gtk-quartz-engine: ########## Error running make -j 5 *** [1/1]

  [1] Rerun phase build
  [2] Ignore error and continue to install
  [3] Give up on module
  [4] Start shell
  [5] Reload configuration
  [6] Go to phase "wipe directory and start over"
  [7] Go to phase "configure"
  [8] Go to phase "clean"
  [9] Go to phase "distclean"
choice: 4

这时候选4,会新开shell并切换到源代码所在目录

$ vim src/quartz-style.c

把1558行改为:

gint width = 0, height = 0;

保存后退出vim,然后输入exit,此时回到上一级菜单:

$ exit
exit

  [1] Rerun phase build
  [2] Ignore error and continue to install
  [3] Give up on module
  [4] Start shell
  [5] Reload configuration
  [6] Go to phase "wipe directory and start over"
  [7] Go to phase "configure"
  [8] Go to phase "clean"
  [9] Go to phase "distclean"
choice: 1

选择1,编译过程会继续。

接下来安装Gtk的FrameWork。下载并安装Gtk-Framework-2.14-LATEST.dmg:Download Mokoi from SourceForge.net

接下来可以安装PyGTK了。jhbuild自带一份Python,如果不安装jhbuild自带的Python,那么PyGTK只能够使用系统自带的Python,即/usr/bin/python。

$ jhbuild build python

安装PyGTK:

$ jhbuild build meta-gtk-osx-python

还需要gtk-chtheme这个小程序,用来选择主题。由于需要编译环境,故启用jhbuild shell:


$ jhbuild shell
Prefix: /Users/$USER/gtk/inst
Entered jhbuild shell, type 'exit' to return.

$ wget http://plasmasturm.org/code/gtk-chtheme/gtk-chtheme-0.3.1.tar.bz2
$ tar jxf gtk-chtheme-0.3.1.tar.bz2

有两处代码需要hack:

util.c 22行注释掉 GTK_WIDGET_UNSET_FLAGS(w, GTK_CAN_FOCUS);
theme_sel.c 113行注释掉 gtk_timeout_add(0, (GtkFunction)theme_list_focus, theme_list);


$ configure --prefix=/Users/$USER/gtk/inst
$ make
$ make install

选择主题:

$ gtk-chtheme

选择Quartz,这个主题即为与Mac OS X风格的主题。

退出jhbuild shell。把/Users/$USER/gtk/inst/lib/python2.7/site-packages添加到变量PYTHONPATH中。然后启动demo:

$ /usr/bin/python ~/gtk/inst/lib/pygtk/2.0/pygtk-demo.py

终于摆脱X11喽。

文章被以下专栏收录
还没有评论
推荐阅读