如何将pkgconfig添加到Cython包装的setup.py中

2024-03-29 07:03:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize

wrapper = Extension(
    name="wrapper",
    sources=["wrapper.pyx"],
    libraries=["library"],
    library_dirs=["builddir/lib"],
    include_dirs=["lib"]
)
setup(
    name="wrapper",
    ext_modules=cythonize([wrapper])
)


我可以这样做,但我不想使用路径(/usr/lib/x86_64-linux-gnu//usr/include/glib-2.0)使其可移植

from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize

wrapper = Extension(
    name="wrapper",
    sources=["wrapper.pyx"],
    libraries=["library"],
    library_dirs=["builddir/lib", "/usr/lib/x86_64-linux-gnu/"],
    include_dirs=["lib", "/usr/include/glib-2.0"]
)
setup(
    name="wrapper",
    ext_modules=cythonize([wrapper])
)

Tags: namefromcoreimportincludelibusrsetup
1条回答
网友
1楼 · 发布于 2024-03-29 07:03:41

this recipe中得到一些启发,我使用了下面的安装文件来找到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标志

相关问题 更多 >