我正在尝试使用c扩展名文件构建共享库,但首先必须使用以下命令生成输出文件:
gcc -Wall utilsmodule.c -o Utilc
执行命令后,我收到以下错误消息:
> utilsmodule.c:1:20: fatal error: Python.h: No such file or directory
compilation terminated.
我在互联网上尝试了所有建议的解决方案,但问题仍然存在。我对这件事没有意见 Python.h
. 我设法在我的机器上找到了这个文件。
30条答案
按热度按时间qc6wkl3g1#
我设法解决了这个问题,并在一个命令中生成了.so文件
juud5qan2#
当您安装了不同的python版本,并且使用的pip不是系统的pip时,这个问题也会出现。在这种情况下,非系统pip将找不到正确版本的python头。
我在尝试为与应用程序捆绑的python安装程序包时遇到了这种情况。因为它不是系统的python,所以apt安装pythonxx dev无法工作。
在本例中,解决方案是找到正确的python头:
在输出中,您将看到系统python头,希望是您正在查找的头,例如:
然后,您可以设置一个编译器标志,当pip调用该标志时,gcc将使用该标志。我的是/home/ubuntu/workspace/blender git/lib/linux_centos7_x86_64/python/include/python3.7m/python.h,所以我做了:
q5iwbnjs3#
这里还有另一个解决方案,因为这些解决方案都不适合我。作为参考,我试图
pip install
python 3.6的AmazonLinuxAMI基础docker映像上的某些内容。非docker解决方案:
docker解决方案:
注意:如果编译C++时出错,请使用
CPLUS_INCLUDE_PATH
.x9ybnkn64#
尝试定位python。h:
如果找不到,则安装python dev或python3 dev;否则,请包括编译器的正确头路径:
jq6vz3qz5#
有时,即使在安装pythondev之后,错误仍然存在,如果缺少“gcc”,请检查错误。
第一次下载如中所述https://stackoverflow.com/a/21530768/8687063,然后安装gcc
对于apt(ubuntu、debian…):
对于百胜集团(centos,rhel…):
对于dnf(软呢帽…):
对于zypper(opensuse…):
对于apk(高山…):
vuv7lop36#
这意味着
Python.h
不在编译器的默认包含路径中。您是否在系统范围内或本地安装了it?你的操作系统是什么?你可以使用
-I<path>
标志指定编译器应在其中查找头的附加目录。你可能需要继续跟进-L<path>
这样gcc就可以找到您将使用的链接库-l<name>
.pod7payv7#
当您尝试删除时,它经常出现
python3.5
安装python3.6
.所以当使用
python3
(哪个python3 -V
=>python3.6
)需要安装一些软件包python3.5
标题将显示此错误。通过安装解决
python3.6-dev
模块。ee7vknir8#
当我试图用python3.6在centos 7上安装CTD时,发生了此错误。我做了这里提到的所有技巧,包括
yum install python34-devel
. 问题是Python.h
发现于/usr/include/python3.4m but not in /usr/include/python3.6m
. 我试着用--global-option
指向包含目录(pip3.6 install --global-option=build_ext --global-option="--include-dirs=/usr/include/python3.4m" ctds
). 这导致了一场灾难lpython3.6m
链接CTD时未找到。最后,修复python3.6的开发环境需要使用include和libs进行纠正。
h需要位于gcc的include路径中。无论使用哪个版本的python,例如,如果它是3.6,那么它应该在
/usr/include/python3.6m/Python.h
典型的hvvq6cgz9#
当然
python-dev
或libpython-all-dev
你是第一件要做的事(apt
)install
,但如果这对我的情况没有帮助,我建议您通过以下方式安装外部函数接口包:sudo apt-get install libffi-dev
及sudo pip install cffi
.这应该会有帮助,尤其是当您将错误视为/来自时
c/_cffi_backend.c:2:20: fatal error: Python.h: No such file or directory
.odopli9410#
如果操作系统附带的python没有随附,则必须在操作系统上安装python开发文件。关于这个问题的许多答案显示了在不同的系统上可以实现这一点的无数方法。
当您这样做时,问题是告诉编译器它们的位置以及如何针对它们进行编译。python附带了一个名为
python-config
. 对于编译,您需要--includes
输出和用于将程序与python库链接(将python嵌入到程序中)的--ldflags
输出。例子:这个
python-config
程序可以以python版本命名——例如在debian、ubuntu上,这些版本可以命名python3-config
或python3.6-config
.ou6hu8tu11#
如果您在AmazonLinux上使用python 3.6(基于rhel,但此处给出的rhel答案不起作用):
wko9yo5t12#
对于opensuse的同志们:
qgzx9mmu13#
对于centos 7:
我按照这里的说明在几个虚拟机上安装python3.6:https://www.digitalocean.com/community/tutorials/how-to-install-python-3-and-set-up-a-local-programming-environment-on-centos-7 然后能够构建mod_wsgi,并让它与python3.6 virtualenv一起工作
oalqel3c14#
试试apt文件。很难记住丢失文件所在的包名。它是通用的,对任何包文件都很有用。
例如:
现在你可以做一个Maven猜测,从哪一个选择。
icomxhvb15#
我在ubuntu中安装coolprop时也遇到了这个错误。
适用于带有python 3.6的ubuntu 16.04
如果这不起作用,请尝试安装/更新
gcc
自由党。