当前位置: 首页 > 知识库问答 >
问题:

致命错误:Python. h:编译pybind11示例时没有这样的文件或目录

曹理
2023-03-14

我从pybind11开始,尝试编译第一个示例。我使用的是XUbuntu 20.04。我的系统python是3.8,但我仅为python 3.10安装了pybind11,这是我在命令提示符下键入python时执行的版本。当我运行pybind11文档中给出的编译命令时:

c++ -O3 -Wall -shared -std=c++11 -fPIC $(python3.10 -m pybind11 --includes) example.cpp -o example$(python3.10-config --extension-suffix)

我收到错误消息

     fatal error: Python.h: No such file or directory
  213 | #include <Python.h>

我遵循了对致命错误的公认答案中给出的建议:Python。h: 没有这样的文件或目录,并运行

sudo apt install python3.10-dev

但这没有任何效果,即使是Python。h现在存在于usr/include/python3.10中。我也许应该提到,目前我没有使用虚拟环境。

编辑

python3.10-config --cflags
-I/usr/include/python3.10 -I/usr/include/python3.10  -Wno-unused-result -Wsign-compare -g   -fstack-protector-strong -Wformat -Werror=format-security  -DNDEBUG -g -fwrapv -O2 -Wall

编辑

我按照9769953的建议更改了命令:

Pybind11Test$ c++ -O3 -Wall -shared -std=c++11 -fPIC $(python3.10 -m pybind11 python3.10-config --includes) example.cpp -o example$(python3.10-config --extension-suffix)
usage: __main__.py [-h] [--includes] [--cmakedir]
__main__.py: error: unrecognized arguments: python3.10-config
example.cpp:1:10: fatal error: pybind11/pybind11.h: No such file or directory
    1 | #include <pybind11/pybind11.h>
      |          ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.

添加python3.10-config给了我一个无法识别的参数错误,但是编译在另一个地方失败了<代码>#包括

文件存在于

/home/saul/.local/lib/python3.10/site-packages/pybind11/include/pybind11/pybind11.h

编辑

最新尝试

Pybind11Test$ c++ -O3 -Wall -shared -std=c++11 -fPIC $(python3.10 -m pybind11 --includes) example.cpp -o example.out
In file included from /home/saul/.local/lib/python3.10/site-packages/pybind11/include/pybind11/detail/../cast.h:13,
                 from /home/saul/.local/lib/python3.10/site-packages/pybind11/include/pybind11/detail/../attr.h:13,
                 from /home/saul/.local/lib/python3.10/site-packages/pybind11/include/pybind11/detail/class.h:12,
                 from /home/saul/.local/lib/python3.10/site-packages/pybind11/include/pybind11/pybind11.h:13,
                 from example.cpp:1:
/home/saul/.local/lib/python3.10/site-packages/pybind11/include/pybind11/detail/../detail/common.h:213:10: fatal error: Python.h: No such file or directory
  213 | #include <Python.h>
      |          ^~~~~~~~~~
compilation terminated.

共有1个答案

邵繁
2023-03-14

问题是操作系统在usr/include/python3.10/include中安装了Python 3.10的头文件。如果还安装了开发包(否则,一组文件将覆盖另一组文件),这将使它们与默认的系统Python(3.8)分离。

但是/usr/include/python3.10/include不在C编译器的默认搜索路径中;您必须添加它。您可以手动执行此操作,但python-config工具通常会(更好地)处理它。添加

python3.10-config --includes

作为子shell命令($(…) )到命令行。与pybind的功能类似,使用$(python-m pybind-includes)让编译器查找pybind的includes文件<很明显,需要使用正确的python配置变量,因此python3.10-config。

共享库文件较少,并且通过文件名中包含Python版本来命名,因此这些文件都可以安全地存在于/usr/lib/x86_64-linux-gnu/中。您会在该目录中找到libpython3.8.solibpython3.10.so彼此相邻。因此无需html" target="_blank">添加库搜索路径(python-config甚至不存在该选项,但它包含在python3.10-config--ld中)。

总而言之,该命令将如下所示:

c++ -O3 -Wall -shared -std=c++11 -fPIC \
$(python3.10-config --includes) \
$(python3.10 -m pybind11 --includes) \
-o example$(python3.10-config --extension-suffix) \
example.cpp

(为了便于阅读,在几行之间断开。)

 类似资料:
  • 问题内容: 我正在尝试使用C扩展文件构建共享库,但首先我必须使用以下命令生成输出文件: 执行命令后,我得到以下错误消息: :致命错误:Python.h:没有此类文件或目录编译终止。 实际上我已经尝试了所有建议的解决方案,但是问题仍然存在…我也没有问题。我设法在我的机器上找到该文件……以前有人遇到过同样的问题吗?? 问题答案: 看来你尚未正确安装python dev的标头文件和静态库。使用软件包管理

  • 我正在尝试使用C扩展文件构建一个共享库,但首先我必须使用下面的命令生成输出文件: 执行该命令后,我得到以下错误消息: 我已经尝试了所有建议的解决方案通过互联网,但问题仍然存在。我对没有任何问题。我设法在我的机器上找到了文件。

  • 如何解决这个问题??Python安装在错误的目录中吗?

  • 问题内容: 我最近在运行Ubuntu 12.04 LTS的Macbook Pro上安装了用于C ++开发的KDevelop 4。 我想在我的C ++代码中嵌入Python应用程序。为此,需要包含Python.h头文件。所以,我做到了。 但是,在运行时,我从IDE收到以下响应: 但是,我很快就发现了问题。我还没有下载python- dev软件包。所以,我做到了。我又跑了一次,但同样的错误又出现了。因

  • 我用的是Centos7。在运行Python 3.5(最新稳定版本)的虚拟环境中,我尝试使用pip3/pip/easy_install安装psycopg2。 在所有情况下,我都会得到以下错误: 致命错误:python.h:没有这样的文件或目录

  • 问题内容: 我刚安装完Ubuntu 13.10。 我想尝试Phalcon,并且在构建源代码(phalcon.so)时出现以下错误: 我安装的灯是: 须藤apt-get install -y apache2 php5 mysql-server libapache2-mod-php5 php5-mysql php5-curl php5-imagick php5-mcrypt php5-memcache