python - 如何在 Cython 包装器的 setup.py 中添加 pkg-config

标签 python cython setup.py distutils pkg-config

如何将 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])
)

最佳答案

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 标志。

关于python - 如何在 Cython 包装器的 setup.py 中添加 pkg-config,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60174152/

相关文章:

python - 我应该嵌入或扩展 python 来创建高质量、高速的 GUI 程序吗?

python - 无法打开包含文件 : 'io.h' : No such file or directory

python-2.7 - 从 setup.py 安装时未复制 yaml 文件

python - Django View 和分离进程

python - python 中 savefig 中的关键事件。怎么做?

python - 使用 cython 或 PyPy 优化元组/列表(用 python 实现的图论算法)

python - 引用 setup.cfg 和 setup.py 中现有的 distutils 选项

python - 根据实现在 setup.py 脚本中指定其他依赖项(PyPy/CPython 支持)

python - 如何获得干净的YouTube成绩单

cython - 如何使用同一 cython memoryview 的多个 View 来 pickle 对象