python - 如何在 Cython 包装器的 setup.py 中添加 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])
)
解决方案
从这个秘籍中得到一些启发,我使用以下设置文件来找到 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 标志。
推荐阅读
- php - PHP Xdebug 不显示变量
- bash - 无法打开输入文件:zsh
- python - 我将如何将 .csv 转换为 .arrow 文件而不将其全部加载到内存中?
- python - 无法缩小网络爬虫中的搜索条件以搜索“职位”并计算每个职位的频率
- python - 为什么我的 matplotlib 箱线图几乎是空的,只有几行和半个点?
- php - 在 model.php 文件中出现未捕获的参考错误
- javascript - PWA 是否有通过 HTTP 访问 LAN 设备的解决方法?
- css - 如何从 App 覆盖其他组件的 css
- python - 无法在 python 3.10 上安装 numpy
- c++ - C ++许多读者单写互斥体饥饿