致命错误:python.h:没有这样的文件或目录

bzzcjhmw  于 2021-08-20  发布在  Java
关注(0)|答案(30)|浏览(451)

我正在尝试使用c扩展名文件构建共享库,但首先必须使用以下命令生成输出文件:

gcc -Wall utilsmodule.c -o Utilc

执行命令后,我收到以下错误消息:

> utilsmodule.c:1:20: fatal error: Python.h: No such file or directory
compilation terminated.

我在互联网上尝试了所有建议的解决方案,但问题仍然存在。我对这件事没有意见 Python.h . 我设法在我的机器上找到了这个文件。

qc6wkl3g

qc6wkl3g1#

我设法解决了这个问题,并在一个命令中生成了.so文件

gcc -shared -o UtilcS.so
-fPIC -I/usr/include/python2.7 -lpython2.7  utilsmodule.c
juud5qan

juud5qan2#

当您安装了不同的python版本,并且使用的pip不是系统的pip时,这个问题也会出现。在这种情况下,非系统pip将找不到正确版本的python头。
我在尝试为与应用程序捆绑的python安装程序包时遇到了这种情况。因为它不是系统的python,所以apt安装pythonxx dev无法工作。
在本例中,解决方案是找到正确的python头:

find / -iname 'Python.h'

在输出中,您将看到系统python头,希望是您正在查找的头,例如:

/usr/include/python3.7m/Python.h
/usr/include/python3.6m/Python.h
/home/ubuntu/workspace/blender-git/lib/linux_centos7_x86_64/python/include/python3.7m/Python.h
/home/ubuntu/miniconda3/pkgs/python-3.8.5-h7579374_1/include/python3.8/Python.h
/home/ubuntu/miniconda3/pkgs/python-3.7.0-h6e4f718_3/include/python3.7m/Python.h
/home/ubuntu/miniconda3/include/python3.8/Python.h
/home/ubuntu/miniconda3/envs/sim/include/python3.7m/Python.h
/home/ubuntu/src/blender-deps/Python-3.7.7/Include/Python.h
/opt/lib/python-3.7.7/include/python3.7m/Python.h

然后,您可以设置一个编译器标志,当pip调用该标志时,gcc将使用该标志。我的是/home/ubuntu/workspace/blender git/lib/linux_centos7_x86_64/python/include/python3.7m/python.h,所以我做了:

export CPPFLAGS=-I/home/ubuntu/src/blender-deps/Python-3.7.7/Include
pip install <package>
q5iwbnjs

q5iwbnjs3#

这里还有另一个解决方案,因为这些解决方案都不适合我。作为参考,我试图 pip install python 3.6的AmazonLinuxAMI基础docker映像上的某些内容。
非docker解决方案:


# Install python3-devel like everyone says

yum -y install python36-devel.x86_64

# Find the install directory of `Python.h`

rpm -ql python36-devel.x86_64 | grep -i "Python.h"

# Forcefully add it to your include path

C_INCLUDE_PATH='/usr/include/python3.6m'
export C_INCLUDE_PATH

docker解决方案:


# Install python3-devel like everyone says

RUN yum -y install python36-devel.x86_64

# Find the install directory of `Python.h`, for me it was /usr/include/python3.6m

RUN rpm -ql python36-devel.x86_64 | grep -i "Python.h" && fake_command_so_docker_fails_and_shows_us_the_output

# Since the previous command contains a purposeful error, remove it before the next run

# Forcefully add it to your include path

ARG C_INCLUDE_PATH='/usr/include/python3.6m'

注意:如果编译C++时出错,请使用 CPLUS_INCLUDE_PATH .

x9ybnkn6

x9ybnkn64#

尝试定位python。h:

gemfield@ThinkPad-X1C:~$ locate Python.h
/home/gemfield/anaconda3/include/python3.7m/Python.h
/home/gemfield/anaconda3/pkgs/python-3.7.6-h0371630_2/include/python3.7m/Python.h
/usr/include/python3.8/Python.h

如果找不到,则安装python dev或python3 dev;否则,请包括编译器的正确头路径:

g++ -I/usr/include/python3.8 ...
jq6vz3qz

jq6vz3qz5#

有时,即使在安装pythondev之后,错误仍然存在,如果缺少“gcc”,请检查错误。
第一次下载如中所述https://stackoverflow.com/a/21530768/8687063,然后安装gcc
对于apt(ubuntu、debian…):

sudo apt-get install gcc

对于百胜集团(centos,rhel…):

sudo yum install gcc

对于dnf(软呢帽…):

sudo dnf install gcc

对于zypper(opensuse…):

sudo zypper in gcc

对于apk(高山…):

sudo apk gcc
vuv7lop3

vuv7lop36#

这意味着 Python.h 不在编译器的默认包含路径中。您是否在系统范围内或本地安装了it?你的操作系统是什么?
你可以使用 -I<path> 标志指定编译器应在其中查找头的附加目录。你可能需要继续跟进 -L<path> 这样gcc就可以找到您将使用的链接库 -l<name> .

pod7payv

pod7payv7#

当您尝试删除时,它经常出现 python3.5 安装 python3.6 .
所以当使用 python3 (哪个 python3 -V => python3.6 )需要安装一些软件包 python3.5 标题将显示此错误。
通过安装解决 python3.6-dev 模块。

ee7vknir

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进行纠正。

yum -y install https://dl.iuscommunity.org/pub/ius/stable/CentOS/7/x86_64/python36u-libs-3.6.3-1.ius.centos7.x86_64.rpm

h需要位于gcc的include路径中。无论使用哪个版本的python,例如,如果它是3.6,那么它应该在 /usr/include/python3.6m/Python.h 典型的

hvvq6cgz

hvvq6cgz9#

当然 python-devlibpython-all-dev 你是第一件要做的事( apt ) install ,但如果这对我的情况没有帮助,我建议您通过以下方式安装外部函数接口包: sudo apt-get install libffi-devsudo pip install cffi .
这应该会有帮助,尤其是当您将错误视为/来自时 c/_cffi_backend.c:2:20: fatal error: Python.h: No such file or directory .

odopli94

odopli9410#

如果操作系统附带的python没有随附,则必须在操作系统上安装python开发文件。关于这个问题的许多答案显示了在不同的系统上可以实现这一点的无数方法。
当您这样做时,问题是告诉编译器它们的位置以及如何针对它们进行编译。python附带了一个名为 python-config . 对于编译,您需要 --includes 输出和用于将程序与python库链接(将python嵌入到程序中)的 --ldflags 输出。例子:

gcc -c mypythonprogram.c $(python3-config --includes)
gcc -o program mypythonprogram.o $(python3-config --ldflags)

这个 python-config 程序可以以python版本命名——例如在debian、ubuntu上,这些版本可以命名 python3-configpython3.6-config .

ou6hu8tu

ou6hu8tu11#

如果您在AmazonLinux上使用python 3.6(基于rhel,但此处给出的rhel答案不起作用):

sudo yum install python36-devel
wko9yo5t

wko9yo5t12#

对于opensuse的同志们:

sudo zypper install python3-devel
qgzx9mmu

qgzx9mmu13#

对于centos 7:

sudo yum install python36u-devel

我按照这里的说明在几个虚拟机上安装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一起工作

oalqel3c

oalqel3c14#

试试apt文件。很难记住丢失文件所在的包名。它是通用的,对任何包文件都很有用。
例如:

root@ubuntu234:~/auto# apt-file search --regexp '/Python.h$'
pypy-dev: /usr/lib/pypy/include/Python.h
python2.7-dbg: /usr/include/python2.7_d/Python.h
python2.7-dev: /usr/include/python2.7/Python.h
python3.2-dbg: /usr/include/python3.2dmu/Python.h
python3.2-dev: /usr/include/python3.2mu/Python.h
root@ubuntu234:~/auto#

现在你可以做一个Maven猜测,从哪一个选择。

icomxhvb

icomxhvb15#

我在ubuntu中安装coolprop时也遇到了这个错误。
适用于带有python 3.6的ubuntu 16.04

sudo apt-get install python3.6-dev

如果这不起作用,请尝试安装/更新 gcc 自由党。

sudo apt-get install gcc

相关问题