Distutils和shell扩展

时间:2012-08-08 19:24:23

标签: python bash distutils

我在Python中有一个需要GTK的扩展模块。编译GTK程序通常需要TON的链接,因为GTK依赖于许多其他库(Glib,Cairo,Pango等)。所以,通常我只是使用shell扩展(back-ticks)使用pkg-config的输出进行编译,例如:

gcc -p-O2 -Wall myprogram.c -o myprogram `pkg-config --cflags gtk+-3.0` `pkg-config --cflag `pkg-config --libs gtk+-3.0`

但由于某种原因,当我在distutils中传递给module.extra_compile_args的参数中使用shell扩展时,我收到一个错误,因为BASH实际上没有扩展表达式:

module = Extension('mymodule',
        sources = ['mymodule.c'])

module.extra_compile_args = ['`pkg-config --cflags gtk+-3.0`', 
        '`pkg-config --libs gtk+-3.0`'];

这只会导致错误:

gcc: error: `pkg-config --cflags gtk+-3.0`: No such file or directory

那么,有没有办法让这项工作?我是否需要手动执行shell扩展,方法是将pkg-config的输出作为Python字符串,然后将其添加为module.extra_compile_args中的元素?

1 个答案:

答案 0 :(得分:2)

module.extra_compile_args = [
  subprocess.check_output(["pkg-config", "--cflags", "gtk+-3.0"]),
  subprocess.check_output(["pkg-config", "--libs", "gtk+-3.0"])
];

http://docs.python.org/library/subprocess.html#subprocess.check_output