首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何强制库(Pybind11)包含来自Python3的<Python.h>?

如何强制库(Pybind11)包含来自Python3的<Python.h>?
EN

Stack Overflow用户
提问于 2020-01-03 10:57:37
回答 1查看 709关注 0票数 1

我正在使用Python库为我的C++代码创建pybind11绑定。

当我编译包含<pybind11/pybind11.h>的绑定代码文件时,它生成以下错误:

代码语言:javascript
复制
/usr/local/include/pybind11/detail/common.h:112:10: fatal error: 'Python.h' file
      not found
#include <Python.h>

我可以通过将其更改为#include <Python/Python.h>来修复此错误,但是该库使用Python2.7来生成绑定。

所以我试着把它改成#include "/usr/local/Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/include/python3.7m/Python.h",现在这个库使用Python3.7来生成绑定,这正是我想要的。

尽管此方法有效,但我想知道是否有更干净的方法可以使库始终包含来自Python3而不是Python2的头文件。

提前谢谢你!

附言:我使用的是macOS 10.15.2

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-03 12:02:10

有几种方法,但AFAIK没有一种方法在所有平台上都是一致的(这就是为什么像cmake (参见:https://github.com/pybind/cmake_example)这样的东西通常是首选的)。

首先是python-config,即add:

代码语言:javascript
复制
`python-config --includes`

(带反勾)到CLI。我的问题是,它是通过$PATH找到的(因此,如果安装没有python-config,则不需要与您正在运行的python版本匹配),并且根据发行版的不同,可能会分别存在用于python2python3python-configpython3-config

其次,还有模块distutils:

代码语言:javascript
复制
`python3 -c 'import distutils.sysconfig as ds; print(ds.get_python_inc())'`

它的优点是可以从您选择的实际python运行。一般来说,distutils也不是完全跨平台一致的,但get_python_inc是一个安全的选择。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59572655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档