Schwerwiegender Fehler: Python.h: Keine solche Datei oder kein solches Verzeichnis

1193

Ich versuche, eine gemeinsam genutzte Bibliothek mit einer C-Erweiterungsdatei zu erstellen, aber zuerst muss ich die Ausgabedatei mit dem folgenden Befehl generieren:

gcc -Wall utilsmodule.c -o Utilc

Nach dem Ausführen des Befehls wird folgende Fehlermeldung angezeigt:

utilsmodule.c: 1: 20: Schwerwiegender Fehler: Python.h: Keine solche Datei- oder Verzeichniskompilierung wurde beendet.

Ich habe alle vorgeschlagenen Lösungen über das Internet ausprobiert, aber das Problem besteht immer noch. Ich habe kein Problem mit Python.h. Ich konnte die Datei auf meinem Computer finden.

Mohanad Y.
quelle

Antworten:

2235

Sieht so aus, als hätten Sie die Header-Dateien und statischen Bibliotheken für Python Dev nicht richtig installiert. Verwenden Sie Ihren Paketmanager, um sie systemweit zu installieren.

Für apt( Ubuntu, Debian ... ):

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

Für yum( CentOS, RHEL ... ):

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

Für dnf( Fedora ... ):

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

Für zypper( openSUSE ... ):

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

Für apk( alpine ... ):

# 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

Für apt-cyg( Cygwin ... ):

apt-cyg install python-devel   # for python2.x installs
apt-cyg install python3-devel  # for python3.x installs
wim
quelle
21
Versuchen locate Python.hSie zu prüfen, ob Sie die Datei bereits haben, bevor Sie dies alles tun. Wenn Sie die gefundene Datei finden, funktioniert diese Antwort meistens: stackoverflow.com/a/19344978/4954434 (Möglicherweise handelt es sich nur um ein
Pfadproblem
2
@ Hack-R und andere Wenn Sie Python 2.6 und 2.7 installiert haben, installiert "python-devel" nur die Entwicklungsbibliotheken für 2.6. Verwenden Siesudo yum install python27-devel
Doktor J
15
Ich benutze Python3.6 am 14.04 apt-get install python3.6-devfür mich gearbeitet.
Bits
9
funktionierte gut für mich (Ubuntu 14.04), musste aber die vollständige Versionsnummer angebensudo apt-get install python3.6-dev
Landrykapela
17
Ebenso mit sudo apt-get install python3.7-dev.
Kas
346

Unter Ubuntu lief Python 3 und ich musste es installieren

sudo apt-get install python3-dev

Wenn Sie eine Version von Python verwenden möchten, die nicht mit python3 verknüpft ist, installieren Sie das zugehörige Paket python3.x-dev. Zum Beispiel:

sudo apt-get install python3.5-dev
FreshPow
quelle
32
Ich habe den Befehl sudo apt-get install python3.4-devfür mein Python3.4 ausgeführt und dies hat mein Problem gelöst.
Aaron Lelevier
4
@Rawrgulmuffins Nun, es hängt davon ab, welche Version von Python Sie verwenden. In meinem Fall wurde sudo apt-get install python2.7-devdas Problem
behoben
6
Ich möchte dieser Antwort noch etwas hinzufügen: Wenn Sie mehrere Python 3.x-Versionen haben, python3-devwerden Abhängigkeiten für die Version installiert, die mit dem python3Befehl verknüpft ist . Wenn Sie also für eine bestimmte Version installieren möchten, verwenden Sie die Vollversion wie - python3.x-dev.
Xyres
3
Dies half mit Python 3.6.3 unter Ubuntu 14.04sudo apt-get install python3.6-dev
Codestruggle
Wenn Sie eine Python-Version in einer virtuellen Umgebung ausführen, die sich von Ihrem Python-System unterscheidet, ist dies der Fall.
SuperShoot
75

Insbesondere für Python 3.7 und Ubuntu brauchte ich

sudo apt install libpython3.7-dev

. Ich denke, irgendwann wurden die Namen von hier geändert pythonm.n-dev.

für Python 3.6 ähnlich:

sudo apt install libpython3.6-dev
ijoseph
quelle
6
ty: Tränen des Vergnügens:
Valem
1
Beeindruckend. Nach etwa 30 Minuten Suche und Installation aller möglichen Dinge löste diese Antwort das Problem
ungefähr möglichen Dinge Vyacheslav Tsivina
!!!!! Natürlich war dies die richtige Lösung für mich mit Python 3.7 und Ubuntu 18.04.
villamejia
danke <3 <3 <3
Kaffee inTime
1
es funktioniert auch für Python 3.6 ... abersudo apt install libpython3.6-dev
Morteza Afshari
70

Zwei Dinge, die Sie tun müssen.

Installieren Sie das Entwicklungspaket für Python. Bei Debian / Ubuntu / Mint erfolgt dies mit dem folgenden Befehl:

sudo apt-get install python-dev

Zweitens sind Include-Dateien weder standardmäßig im Include-Pfad enthalten, noch ist die Python-Bibliothek standardmäßig mit der ausführbaren Datei verknüpft. Sie müssen diese Flags hinzufügen (ersetzen Sie die Python-Version entsprechend):

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

Mit anderen Worten, Ihr Kompilierungsbefehl sollte lauten:

gcc -Wall -I/usr/include/python2.7 -lpython2.7  utilsmodule.c -o Utilc 
vartec
quelle
Muss ich für jede enthaltene Datei in der C-Erweiterungsdatei Flags hinzufügen?
Mohanad Y.
1
Wenn Sie eine andere Version von Python verwenden, 3.3 zum Beispiel: sudo apt-get install python3.3-dev
FreshPow
Ich würde empfehlen, pkg-configanstelle eines Raw zu verwenden -I: stackoverflow.com/a/21531170/895245
Ciro Santilli 15 病毒 审查 六四 事件 15
47

Wenn Sie einen Raspberry Pi verwenden:

sudo apt-get install python-dev
Malachi Bazar
quelle
35

Führen Sie dies auf Fedora für Python 2 aus:

sudo dnf install python2-devel

und für Python 3:

sudo dnf install python3-devel
ravi.zombie
quelle
1
Auf Mint 18.2 (Ubuntu-basiert) war es apt-get install python-dev.
Deleet
30

Wenn Sie tox verwenden , um Tests für mehrere Python-Versionen auszuführen, müssen Sie möglicherweise die Python-Entwicklungsbibliotheken für jede Version von Python installieren, auf der Sie testen.

sudo apt-get install python2.6-dev 
sudo apt-get install python2.7-dev 
etc.
Christian Long
quelle
27

Lösung für Cygwin

Sie müssen das Paket installieren python2-develoderpython3-devel , abhängig von der verwendeten Python-Version.

Sie können es schnell mit 32-Bit oder 64-Bit setup.exe (abhängig von Ihrer Installation) von Cygwin.com installieren .

Beispiel (ändern Sie setup.exeden Dateinamen und die Hauptversion von Python, falls erforderlich):

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

Sie können auch in meiner anderen Antwort nach weiteren Optionen suchen, um Cygwins Pakete über die Befehlszeile zu installieren.

David Ferenczy Rogožan
quelle
22

In der AWS API (centOS) ist es

yum install python27-devel
Yespbs
quelle
Dies gibt keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlassen Sie einen Kommentar unter seinem Beitrag. Sie können jederzeit Ihre eigenen Beiträge kommentieren. Sobald Sie einen ausreichenden Ruf haben, können Sie jeden Beitrag kommentieren .
Wtower
2
@Wtower Ja, es gibt eine Antwort.
Tadeusz Kopec
1
Es gibt eine Antwort. Obwohl Sie die Version für das ersetzen müssen, was Sie brauchen.
Ganesh Krishnan
1
Dies half mir, meine Probleme zu lösen, die ich pip install cryptographyauf einer Amazon Linux-Instanz versuchte .
Ryan Tuck
Dies war eine hilfreiche Antwort. Es ist zwar möglich, Python-Devel oder Python2-Devel unter Amazon Linux zu installieren, dies ist jedoch die einzige, die bei der Ausführung einer Pip-Installation in einer virtuellen Umgebung tatsächlich funktioniert hat
Kristofor Carle
21

Für mich hat es funktioniert, dies zu ändern:

#include <python2.7/Python.h>

Ich habe die Datei gefunden /usr/include/python2.7/Python.hund da /usr/includeist sie dann schon im Include-Pfadpython2.7/Python.h sollte sie dann ausreichen.

Sie können stattdessen auch den Include-Pfad über die Befehlszeile hinzufügen - gcc -I/usr/lib/python2.7(danke @ erm3nda).

Sashoalm
quelle
4
Alle anderen Antworten sagen Ihnen, dass Sie etwas installieren sollen. Dieser hat für mich gearbeitet. Warum ist das nicht die beste Antwort?
noɥʇʎԀʎzɐɹƆ
1
@ uoɥʇʎPʎzɐɹC Vielleicht, weil es nicht unter Python3 läuft?
Louis
Es ist besser, die lib auf zu setzen, gcc -I/usr/lib/python2.7 etcals die Include-Aufrufe fest zu codieren.
m3nda
1
@ noɥʇʎԀʎzɐɹƆ Weil es funktionieren sollte, ohne den Code zu ändern. Sie müssen häufig einen Code kompilieren, der Ihnen nicht gehört, z. B. eine externe Abhängigkeit, und das Schlimmste, was Sie tun können, ist, diesen Code zu ändern.
David Ferenczy Rogožan
@DawidFerenczy Understod.
noɥʇʎԀʎzɐɹƆ
19

Stellen Sie sicher, dass die Python-Entwicklungsdateien mit Ihrem Betriebssystem geliefert werden.

Sie sollten die Bibliothek nicht hart codieren und Pfade einschließen. Verwenden Sie stattdessen pkg-config, um die richtigen Optionen für Ihr spezifisches System auszugeben:

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

Sie können es Ihrer gcc- Zeile hinzufügen :

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

AWS EC2-Installation mit Python34:

sudo yum install python34-devel

Parsethis
quelle
14

In meinem Fall wurde das Problem in Ubuntu behoben, indem die Pakete installiert wurden libpython-all-dev(oder libpython3-all-devwenn Sie Python 3 verwenden).

Oriol Nieto
quelle
2
python-all-devin meinem Fall, aber nah genug.
Dave S.
1
@Oriol Nieto, vielen Dank. Python-All-Dev hat das Problem auch für mich gelöst.
Shrawan_lakhe
14

Wenn Sie eine virtuelle Umgebung mit einer 3.6-Python-Version verwenden (Edge im Moment), müssen Sie unbedingt die passende Python 3.6- Entwicklung installieren. sudo apt-get install python3.6-devAndernfalls sudo python3-devwird bei der Ausführung die Python-Entwicklung 3.3.3-1 installiert, wodurch das Problem nicht behoben wird.

Guillaume Cisco
quelle
1
Hat auch bei 3.5 (.2) super funktioniert. Die explizite Installation des richtigen Entwicklungspakets für Ihre Python-Version ist eine gute Sache.
Seth
13

Es ist nicht die gleiche Situation, aber es funktioniert auch für mich und jetzt kann ich SWIG mit Python3.5 verwenden :

Ich habe versucht zu kompilieren:

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

Mit Python 2.7 funktioniert gut, nicht mit meiner Version 3.5:

existe_wrap.c: 147: 21: schwerwiegender Fehler: Python.h: Keine existe el archivo o el Directorio-Kompilierung wurde beendet.

Nach dem Ausführen in meiner Ubuntu 16.04-Installation:

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

Jetzt kann ich ohne Probleme Python3.5 kompilieren:

gcc -fPIC -c existe.c existe_wrap.c -I /usr/include/python3.5m/
Hugo LM
quelle
11

Ich bin auch auf diesen Fehler gestoßen, als ich coolprop in Ubuntu installiert habe.

Für Ubuntu 16.04 mit Python 3.6

sudo apt-get install python3.6-dev

Wenn dies jemals nicht funktioniert, versuchen Sie es zu installieren / aktualisieren gcc lib zu .

sudo apt-get install gcc
Wreeecks
quelle
1
omg, ich hatte so lange damit zu kämpfen, weil ich python3-devviele Male gelaufen war und immer den gleichen Fehler bekam, aber nichts davon wusste python3.6-dev!! Vielen Dank!!
Blairg23
10

versuchen Sie apt-file. Es ist schwierig, sich den Paketnamen zu merken, in dem sich die fehlende Datei befindet. Es ist allgemein und nützlich für alle Paketdateien.

Zum Beispiel:

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# 

Jetzt können Sie einen Experten erraten, aus welchem ​​Sie auswählen können.

Venfah Nazir
quelle
10

Ich habe es geschafft, dieses Problem zu lösen und die .so-Datei in einem Befehl zu generieren

gcc -shared -o UtilcS.so
-fPIC -I/usr/include/python2.7 -lpython2.7  utilsmodule.c
Mohanad Y.
quelle
8

Für die OpenSuse-Kameraden da draußen:

sudo zypper install python3-devel
kmonsoor
quelle
5

Wenn Sie Python 3.6 unter Amazon Linux verwenden (basierend auf RHEL, aber die hier angegebenen RHEL-Antworten haben nicht funktioniert):

sudo yum install python36-devel
Yigal
quelle
4

Dieser Fehler trat auf, als ich versuchte, ctds unter CentOS 7 mit Python3.6 zu installieren. Ich habe alle hier genannten Tricks gemacht, einschließlich yum install python34-devel. Das Problem wurde Python.hin gefunden /usr/include/python3.4m but not in /usr/include/python3.6m. Ich habe versucht, --global-optionauf dir ( pip3.6 install --global-option=build_ext --global-option="--include-dirs=/usr/include/python3.4m" ctds) zu verweisen . Dies führte dazu lpython3.6m, dass beim Verknüpfen von ctds kein gefunden wurde.

Schließlich funktionierte die Korrektur der Entwicklungsumgebung für Python3.6, die mit include und libs korrigiert werden musste.

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

Python.h muss sich in Ihrem Include-Pfad für gcc befinden. Unabhängig davon, welche Python-Version verwendet wird, z. B. wenn es sich um 3.6 handelt, sollte dies /usr/include/python3.6m/Python.hnormalerweise der Fall sein .

Babu Arunachalam
quelle
Ich bin mir nicht sicher, warum es eine -1 gibt, aber dies ist ab heute ein Problem für Python3.6 mit CentOS, da Python36-Devel nicht verfügbar ist. Sie müssen es über die oben angegebene URL installieren.
Babu Arunachalam
4

Sicher python-devoder libpython-all-devsind das erste, was ( apt) ist install, aber wenn das nicht hilft, wie es mein Fall war, empfehle ich Ihnen, die fremden Function Interface- Pakete von sudo apt-get install libffi-devund zu installieren sudo pip install cffi.

Dies sollte insbesondere dann hilfreich sein, wenn Sie den Fehler als / von sehen c/_cffi_backend.c:2:20: fatal error: Python.h: No such file or directory.

Enorm
quelle
sudo pip3 install cffi (# für python3)
Magnus Melwin
3

Es wird häufig angezeigt, wenn Sie versuchen, es zu entfernen python3.5und zu installieren python3.6.

Wenn Sie also python3(which python3 -V=> python3.6) zum Installieren einiger erforderlicher Pakete verwenden, python3.5wird dieser Fehler angezeigt.

Lösung durch Installationsmodul python3.6-dev.

Dphans
quelle
3
  1. Sie müssen die Python-Entwicklungsdateien auf Ihrem Betriebssystem installieren, wenn das mit Ihrem Betriebssystem gelieferte Python nicht mitgeliefert wird. Die vielen Antworten auf diese Frage zeigen die unzähligen Möglichkeiten, wie dies auf verschiedenen Systemen erreicht werden kann.

  2. Wenn Sie dies getan haben, besteht das Problem darin, dem Compiler mitzuteilen, wo sie sich befinden und wie er gegen sie kompiliert. Python wird mit einem Programm namens geliefert python-config. Zum Kompilieren benötigen Sie die --includesAusgabe und zum Verknüpfen eines Programms mit der Python-Bibliothek (Einbetten von Python in Ihr Programm) die --ldflagsAusgabe. Beispiel:

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

Das python-configProgramm kann nach den Python-Versionen benannt werden - unter Debian, Ubuntu zum Beispiel können diese benannt werden python3-configoder python3.6-config.

Antti Haapala
quelle
2

Manchmal bleibt der Fehler auch nach der Installation von python-dev bestehen. Überprüfen Sie, ob der Fehler "gcc" fehlt.

Laden Sie zuerst wie unter https://stackoverflow.com/a/21530768/8687063 angegeben herunter und installieren Sie dann gcc

Für apt (Ubuntu, Debian ...):

sudo apt-get install gcc

Für lecker (CentOS, RHEL ...):

sudo yum install gcc

Für dnf (Fedora ...):

sudo dnf install gcc

Für Zypper (openSUSE ...):

sudo zypper in gcc

Für apk (Alpine ...):

sudo apk gcc
HimanshuGahlot
quelle
1

Dies bedeutet, dass dies Python.hnicht in den Standard-Include-Pfaden Ihres Compilers enthalten ist. Haben Sie es systemweit oder lokal installiert? Was ist dein Betriebssystem?

Mit dem -I<path>Flag können Sie ein zusätzliches Verzeichnis angeben, in dem Ihr Compiler nach Headern suchen soll. Sie müssen wahrscheinlich nachverfolgen, -L<path>damit gcc die Bibliothek findet, mit der Sie verknüpfen -l<name>.

Kos
quelle