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

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

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

gcc -Wall utilsmodule.c -o Utilc

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

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

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

vltsax25

vltsax251#

看起来您尚未正确安装python开发的头文件和静态库。请使用软件包管理器在系统范围内安装它们。
对于 apt (ubuntu、debian…)

sudo apt-get install python-dev   # for python2.x installs
sudo apt-get install python3-dev  # for python3.x installs

对于 yum (centos,rhel…)

sudo yum install python-devel    # for python2.x installs
sudo yum install python3-devel   # for python3.x installs

对于 dnf (软呢帽…)

sudo dnf install python2-devel  # for python2.x installs
sudo dnf install python3-devel  # for python3.x installs

对于 zypper (opensuse…):

sudo zypper in python-devel   # for python2.x installs
sudo zypper in python3-devel  # for python3.x installs

对于 apk (高山…)


# This is a departure from the normal Alpine naming

# scheme, which uses py2- and py3- prefixes

sudo apk add python2-dev  # for python2.x installs
sudo apk add python3-dev  # for python3.x installs

对于 apt-cyg (cygwin…)

apt-cyg install python-devel   # for python2.x installs
apt-cyg install python3-devel  # for python3.x installs
s5a0g9ez

s5a0g9ez2#

在ubuntu上,我运行的是Python3,我必须安装它

sudo apt-get install python3-dev

如果要使用未链接到python3的python版本,请安装相关的python3.x-dev包。例如:

sudo apt-get install python3.5-dev
jw5wzhpr

jw5wzhpr3#

特别是对于Python3.7和ubuntu,我需要

sudoapt安装libpython3.7-dev

. 我想在某些时候,名字从 pythonm.n-dev 对这个。
类似地,对于python 3.6、3.8和3.9: sudo apt install libpython3.6-devsudo apt install libpython3.8-devsudo apt install libpython3.9-dev

monwx1rj

monwx1rj4#

你必须做两件事。
安装python开发包,对于debian/ubuntu/mint,使用以下命令完成:

sudo apt-get install python-dev

第二件事是,默认情况下,include文件不在include路径中,python库也不与可执行文件链接。您需要添加以下标志(相应地替换python版本):

-I/usr/include/python2.7 -lpython2.7

换句话说,编译命令应该是:

gcc -Wall -I/usr/include/python2.7 -lpython2.7  utilsmodule.c -o Utilc
t40tm48m

t40tm48m5#

如果您使用的是覆盆子pi:

sudo apt-get install python3-dev
b1payxdu

b1payxdu6#

在fedora上,为python 2运行以下命令:

sudo dnf install python2-devel

对于python 3:

sudo dnf install python3-devel
kx7yvsdv

kx7yvsdv7#

如果使用tox在多个版本的python上运行测试,则可能需要为正在测试的每个版本的python安装python开发库。

sudo apt-get install python2.6-dev 
sudo apt-get install python2.7-dev 
etc.
jvidinwx

jvidinwx8#

确保操作系统附带python开发文件。
您不应该硬编码库并包含路径。相反,请使用pkg config,它将为您的特定系统输出正确的选项:

$ pkg-config --cflags --libs python2
-I/usr/include/python2.7 -lpython2.7

您可以将其添加到gcc行:

gcc -Wall utilsmodule.c -o Utilc $(pkg-config --cflags --libs python2)
ctrmrzij

ctrmrzij9#

cygwin的解决方案

你需要安装这个软件包 python2-develpython3-devel ,具体取决于您使用的python版本。
您可以使用32位或64位 setup.exe (取决于您的安装)从cygwin.com下载。
示例(修改) setup.exe 的文件名和python的主要版本(如果需要):

$ setup.exe -q --packages=python3-devel

您还可以查看我的另一个答案,从命令行获得更多安装cygwin软件包的选项。

q5iwbnjs

q5iwbnjs10#

对我来说,把它改成这样很有效:


# include <python2.7/Python.h>

我找到了文件 /usr/include/python2.7/Python.h ,自 /usr/include 已在包含路径中,则 python2.7/Python.h 应该足够了。
也可以从命令行添加include路径- gcc -I/usr/lib/python2.7 (谢谢@erm3nda)。

uoifb46i

uoifb46i11#

在aws api(centos)中

yum install python27-devel
wsewodh2

wsewodh212#

aws ec2安装正在运行的python34: sudo yum install python34-devel

tzcvj98z

tzcvj98z13#

如果您将virtualenv与3.6 python(立即使用edge)一起使用,请确保安装匹配的python 3.6开发人员 sudo apt-get install python3.6-dev ,否则执行 sudo python3-dev 将安装python dev 3.3.3-1,但这并不能解决问题。

w1jd8yoj

w1jd8yoj14#

在我的例子中,ubuntu的修复方法是安装软件包 libpython-all-dev (或 libpython3-all-dev 如果您使用python 3)。

ej83mcc0

ej83mcc015#

情况不一样,但它对我也适用,现在我可以将swig与python3.5结合使用:
我试图编译:

gcc -fPIC -c existe.c existe_wrap.c -I /usr/include/python3.5m/

使用python 2.7可以很好地工作,而不是使用我的3.5版:
existe_wrap.c:147:21:致命错误:python.h:未终止existe el archivo o el directorio编译。
在我的ubuntu 16.04安装中运行后:

sudo apt-get install python3-dev  # for python3.x installs

现在我可以毫无问题地编译python3.5:

gcc -fPIC -c existe.c existe_wrap.c -I /usr/include/python3.5m/

相关问题