gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:38:05 25 4
gpt4 key购买 nike

如何将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com