Python 如何将pkg config添加到Cython包装的setup.py中

Python 如何将pkg config添加到Cython包装的setup.py中,python,cython,setup.py,distutils,pkg-config,Python,Cython,Setup.py,Distutils,Pkg Config,如何将pkg config添加到以下setup.py(例如,如果我想添加glib-2.0) 来自distutils.core导入设置 从distutils.extension导入扩展 从Cython.Build导入cythonize 包装器=扩展( name=“包装器”, sources=[“wrapper.pyx”], 库=[“库”], 库_dirs=[“builddir/lib”], include_dirs=[“lib”] ) 设置( name=“包装器”, ext_modules=cyt

如何将pkg config添加到以下
setup.py
(例如,如果我想添加
glib-2.0

来自distutils.core导入设置
从distutils.extension导入扩展
从Cython.Build导入cythonize
包装器=扩展(
name=“包装器”,
sources=[“wrapper.pyx”],
库=[“库”],
库_dirs=[“builddir/lib”],
include_dirs=[“lib”]
)
设置(
name=“包装器”,
ext_modules=cythonize([wrapper])
)

我可以按如下方式操作,但我不想使用路径(
/usr/lib/x86\u 64-linux-gnu/
/usr/include/glib-2.0
)并使其可移植

来自distutils.core导入设置
从distutils.extension导入扩展
从Cython.Build导入cythonize
包装器=扩展(
name=“包装器”,
sources=[“wrapper.pyx”],
库=[“库”],
library_dirs=[“builddir/lib”,“/usr/lib/x86_64-linux-gnu/”],
include_dirs=[“lib”,“/usr/include/glib-2.0”]
)
设置(
name=“包装器”,
ext_modules=cythonize([wrapper])
)

从中获得一些灵感,我使用以下设置文件为GSL找到了正确的路径

import subprocess

from setuptools import setup, Extension
from Cython.Build import cythonize


def pkgconfig(package, kw):
    flag_map = {'-I': 'include_dirs', '-L': 'library_dirs', '-l': 'libraries'}
    output = subprocess.getoutput(
        'pkg-config --cflags --libs {}'.format(package))
    for token in output.strip().split():
        kw.setdefault(flag_map.get(token[:2]), []).append(token[2:])
    return kw


example_src = ['src/example.c', 'example/example.pyx']
example_inc = ['include']
extension_kwargs = {
    'sources': example_src,
    'include_dirs': example_inc,
}

extension_kwargs = pkgconfig('gsl', extension_kwargs)

example_ext = Extension('example.example', **extension_kwargs)

setup(name="example",
      ext_modules=cythonize([example_ext], annotate=True),
      packages=['example']
      )
您可以使用
pkgconfig
函数通过传递
glib-2.0
作为
package
参数来查找glib标志