开源改变世界!!

配置期间缺少必需的标头 Python.h #1658

推推 grbl 2年前 (2023-01-30) 136次浏览
关闭
3 个任务中的第 1 个
阿利斯塔 打开了这个问题 2022 年 3 月 10 日 · 11 条评论
关闭
3 个任务中的第 1 个

配置期间缺少必需的标头 Python.h#1658

阿利斯塔 打开了这个问题 2022 年 3 月 10 日 · 11 条评论

注释

配置期间缺少必需的标头 Python.h #1658

以下是我重现该问题所遵循的步骤:

  1. 我的配置命令是:
    ./configure --with-realtime=uspace --enable-non-distributable=yes --with-boost-python=boost_python39

这是我期望发生的事情:

配置命令应该无误地完成。

这是发生了什么:

配置输出的最后几行:

checking for msgfmt... /usr/bin/msgfmt
checking python version... OK
checking version of python libraries... python3.9
checking match between tk and Tkinter versions... 8.6
checking location of Python header files... /usr/include/python3.9
checking for Python headers... -I/usr/include/python3.9
checking for Python libraries... -lpthread -ldl  -lutil -lm
checking whether the Boost::Python headers are available... yes
checking for boost::python shared library... -lboost_python39
checking /usr/include/python3.9/Python.h usability... no
checking /usr/include/python3.9/Python.h presence... no
checking for /usr/include/python3.9/Python.h... no
configure: error: Required header Python.h missing.  Install it, or specify --disable-python to skip the parts of LinuxCNC that depend on Python

那个 .h 文件存在,所以有某种检查导致它失败:

ls -la /usr/include/python3.9/Python.h
-rw-r--r-- 1 root root 3533 Feb 23 10:07 /usr/include/python3.9/Python.h

在此之前它工作正常:

几年来,我一直在成功地将 LinuxCNC (v2.9.0-pre0) 与 Python 2.7 结合使用。Python 2 在我的发行版上越来越难维护,所以我想用 Python 3 构建它。

有关我的硬件和软件的信息:

  • 我正在使用此 Linux 发行版和版本(通常由 显示lsb_release -a):
    LSB 版本:n/a
    发行商 ID:Gentoo
    描述:Gentoo Base System 版本 2.7
    版本:2.7
    代号:n/a

  • 我正在使用此内核版本(显示为uname -a):
    Linux legolas 4.19.10-rt-rt8 tp:停止时非零电流速度的可能修复 #10 SMP PREEMPT RT Thu Sep 16 09:36:33 NZST 2021 x86_64 Intel( R) Core(TM)2 四核 CPU Q6600 @ 2.40GHz GenuineIntel GNU/Linux

  • 我在跑步 …

    • 来自 linuxcnc.org 的二进制版本(包括 buildbot.linuxcnc.org)
    • 我自己构建的二进制文件
    • 来自 linuxcnc.org 之外的其他来源的二进制版本
  • 我正在使用这个 LinuxCNC 版本(显示在包管理器中,或者对于 git 版本,scripts/get-version-from-git):
    v2.9.0-pre0-1019-g2e0f88e2a

  • 我正在使用此用户界面 (GUI)(例如 AXIS、Touchy、gmoccapy 等):
    AXIS

  • 我正在使用此接口硬件供应商和芯片组(例如,并行端口、以太网端口、FPGA 卡):
    并行端口

问题:
我可以启用更详细版本的配置测试,以便我可以看到这里发生了什么吗?

配置期间缺少必需的标头 Python.h #1658
贡献者

您好,
“python3 –version”是什么意思?这只是为了遵循我的直觉,即您拥有 3.9 的 -dev 文件,但正在与 3.10 一起工作。
干杯,
斯蒂芬

配置期间缺少必需的标头 Python.h #1658
作者

返回“Python 3.9.9”

配置期间缺少必需的标头 Python.h #1658
贡献者

可能有另一种方式来触发它。是否(在 Debian 中)有第二个(更新的)Python 版本可用?请查看有什么ls /usr/bin/python3*优惠或尝试一下:

/usr/bin/python3.10 -c "print('3.10 is also available')" || echo "Nope, nice try."
配置期间缺少必需的标头 Python.h #1658
作者

结果是:
3.10 也可用

配置期间缺少必需的标头 Python.h #1658
贡献者
烟雾 评论了 2022 年 3 月 11 日  

从你可以得到帮助的意义上说,这是个好消息。我认为 :) “Python 检测”将找到 3.10 版本并仅搜索包含文件。请应用此补丁:

--- linuxcnc.orig/src/m4/ax_python.m4
+++ linuxcnc/src/m4/ax_python.m4
@@ -55,7 +55,7 @@
 AC_DEFUN([AX_PYTHON],
 [AC_MSG_CHECKING(for python build information)
 AC_MSG_RESULT([])
-for python in python3.10 python3.9 python3.8 python3.7 python3.6 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python; do
+for python in python3.9 python3.8 python3.7 python3.6 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python; do
 AC_CHECK_PROGS(PYTHON_BIN, [$python])
 ax_python_bin=$PYTHON_BIN
 if test x$ax_python_bin != x; then

阅读:请删除对 python3.10 的搜索
并享受您当时最有可能完美的构建。

Fedora 已经更高级并且需要它,所以我们不能删除它。

配置期间缺少必需的标头 Python.h #1658
作者
阿利斯塔 评论了 2022 年 3 月 11 日  

感谢非常有帮助的建议。
我所做的是将系统 python 默认为 3.10,重建 python(因此它构建各种库的 3.10 版本)并将配置行更改为:

./configure --with-realtime=uspace --enable-non-distributable=yes --with-boost-python=boost_python310

那行得通。此错误有一个小问题:

config.status: error: cannot find input file: ../share/desktop-directories/cnc.directory.in’`

我通过将 ../share/desktop-directories/cnc.directory 重命名为 ../share/desktop-directories/cnc.directory.in 来解决这个问题

当运行“make”时,它变得很远然后给出这个错误:

yapps: no python-exec wrapped executable found in /usr/lib/python-exec.
make: *** [hal/utils/Submakefile:102: objects/hal/utils/halcompile.py] Error 127

我记得几年前在 python2.7 上与 yapps 斗争。“which yapps”返回这个:

/usr/bin/yapps

我可以看到 /usr/lib/python-exec/python3.10 中没有“yapps”文件,但有一个“yappi”文件。所以我安装了“pip”,然后通过它安装了 yapps。现在 yapps 将运行,尽管我在“make”期间遇到此错误:

Syntax checking python script halcompile
Copying python script halcompile
Preprocessing thermistor.comp
Traceback (most recent call last):
  File "/home/allistar/Projects/linuxcnc-build/src/../bin/halcompile", line 23, in <module>
    from yapps import runtime
  File "/home/allistar/.local/lib/python3.10/site-packages/yapps/runtime.py", line 438
    except SyntaxError, e:
           ^^^^^^^^^^^^^^
SyntaxError: multiple exception types must be parenthesized
make: *** [hal/user_comps/Submakefile:102: objects/hal/user_comps/thermistor.c] Error 1

yapps 似乎已被弃用,或者可能无法在 python3.10 上正常工作,这看起来像是 Python2 与 Python3 的区别。我通过在异常类型定义周围添加 ( ) 来编辑该文件中的那一行。make 命令完成。运行时出现错误:没有名为“OpenGL”的模块。安装 python opengl 模块后,它就可以工作了!

我很高兴不必再在该服务器上使用 python 2.7。再次感谢您的帮助。

如果有一个用于 LinuxCNC 的 gentoo ebuild 就好了,但我想没有多少人使用那个用于 CNC 的发行版。

配置期间缺少必需的标头 Python.h #1658
贡献者

我想 LinuxCNC 现在有你了 :) 你可能想要做的是打开一个标题为 Gentoo 的新问题并寻求联系方式。也可以通过 IRC 或 Discord 频道向邮件列表或 Discord 发送电子邮件。非常感谢您完成旅程!

配置期间缺少必需的标头 Python.h #1658
贡献者
筒仓 评论了 2022 年 3 月 12 日 通过电子邮件
配置期间缺少必需的标头 Python.h #1658
贡献者

这个问题可以关闭吗?或者重命名为“我们想要一个 LinuxCNC-gentoo 包”?

配置期间缺少必需的标头 Python.h #1658
作者

我很高兴关闭它。我会在某个时候提出一个需要 Gentoo 软件包的新问题。
它似乎确实是一个错误,它会使用最高安装的 python,而不管它是否是当前活动的。