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.
quelle
locate Python.h
Sie 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 einsudo yum install python27-devel
apt-get install python3.6-dev
für mich gearbeitet.sudo apt-get install python3.6-dev
sudo apt-get install python3.7-dev
.Unter Ubuntu lief Python 3 und ich musste es installieren
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:
quelle
sudo apt-get install python3.4-dev
für mein Python3.4 ausgeführt und dies hat mein Problem gelöst.sudo apt-get install python2.7-dev
das Problempython3-dev
werden Abhängigkeiten für die Version installiert, die mit dempython3
Befehl verknüpft ist . Wenn Sie also für eine bestimmte Version installieren möchten, verwenden Sie die Vollversion wie -python3.x-dev
.sudo apt-get install python3.6-dev
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
quelle
sudo apt install libpython3.6-dev
Zwei Dinge, die Sie tun müssen.
Installieren Sie das Entwicklungspaket für Python. Bei Debian / Ubuntu / Mint erfolgt dies mit dem folgenden Befehl:
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):
Mit anderen Worten, Ihr Kompilierungsbefehl sollte lauten:
quelle
pkg-config
anstelle eines Raw zu verwenden-I
: stackoverflow.com/a/21531170/895245Wenn Sie einen Raspberry Pi verwenden:
quelle
Führen Sie dies auf Fedora für Python 2 aus:
und für Python 3:
quelle
apt-get install python-dev
.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.
quelle
Lösung für Cygwin
Sie müssen das Paket installieren
python2-devel
oderpython3-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.exe
den Dateinamen und die Hauptversion von Python, falls erforderlich):Sie können auch in meiner anderen Antwort nach weiteren Optionen suchen, um Cygwins Pakete über die Befehlszeile zu installieren.
quelle
In der AWS API (centOS) ist es
quelle
pip install cryptography
auf einer Amazon Linux-Instanz versuchte .Für mich hat es funktioniert, dies zu ändern:
Ich habe die Datei gefunden
/usr/include/python2.7/Python.h
und da/usr/include
ist 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).quelle
gcc -I/usr/lib/python2.7 etc
als die Include-Aufrufe fest zu codieren.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:
Sie können es Ihrer gcc- Zeile hinzufügen :
quelle
AWS EC2-Installation mit Python34:
sudo yum install python34-devel
quelle
In meinem Fall wurde das Problem in Ubuntu behoben, indem die Pakete installiert wurden
libpython-all-dev
(oderlibpython3-all-dev
wenn Sie Python 3 verwenden).quelle
python-all-dev
in meinem Fall, aber nah genug.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-dev
Andernfallssudo python3-dev
wird bei der Ausführung die Python-Entwicklung 3.3.3-1 installiert, wodurch das Problem nicht behoben wird.quelle
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:
Mit Python 2.7 funktioniert gut, nicht mit meiner Version 3.5:
Nach dem Ausführen in meiner Ubuntu 16.04-Installation:
Jetzt kann ich ohne Probleme Python3.5 kompilieren:
quelle
Ich bin auch auf diesen Fehler gestoßen, als ich coolprop in Ubuntu installiert habe.
Für Ubuntu 16.04 mit Python 3.6
Wenn dies jemals nicht funktioniert, versuchen Sie es zu installieren / aktualisieren
gcc
lib zu .quelle
python3-dev
viele Male gelaufen war und immer den gleichen Fehler bekam, aber nichts davon wusstepython3.6-dev
!! Vielen Dank!!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:
Jetzt können Sie einen Experten erraten, aus welchem Sie auswählen können.
quelle
Ich habe es geschafft, dieses Problem zu lösen und die .so-Datei in einem Befehl zu generieren
quelle
Für die OpenSuse-Kameraden da draußen:
quelle
Für CentOS 7:
Ich habe die Anweisungen hier zum Installieren von Python3.6 auf mehreren VMs befolgt: https://www.digitalocean.com/community/tutorials/how-to-install-python-3-and-set-up-a-local-programming- environment-on-centos-7 und war dann in der Lage, mod_wsgi zu erstellen und es mit einer virtuellen Python3.6-Version zum Laufen zu bringen
quelle
Wenn Sie Python 3.6 unter Amazon Linux verwenden (basierend auf RHEL, aber die hier angegebenen RHEL-Antworten haben nicht funktioniert):
quelle
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 wurdePython.h
in gefunden/usr/include/python3.4m but not in /usr/include/python3.6m
. Ich habe versucht,--global-option
auf dir (pip3.6 install --global-option=build_ext --global-option="--include-dirs=/usr/include/python3.4m" ctds
) zu verweisen . Dies führte dazulpython3.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.
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.h
normalerweise der Fall sein .quelle
Sicher
python-dev
oderlibpython-all-dev
sind das erste, was (apt
) istinstall
, aber wenn das nicht hilft, wie es mein Fall war, empfehle ich Ihnen, die fremden Function Interface- Pakete vonsudo apt-get install libffi-dev
und zu installierensudo 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
.quelle
Es wird häufig angezeigt, wenn Sie versuchen, es zu entfernen
python3.5
und zu installierenpython3.6
.Wenn Sie also
python3
(whichpython3 -V
=>python3.6
) zum Installieren einiger erforderlicher Pakete verwenden,python3.5
wird dieser Fehler angezeigt.Lösung durch Installationsmodul
python3.6-dev
.quelle
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.
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--includes
Ausgabe und zum Verknüpfen eines Programms mit der Python-Bibliothek (Einbetten von Python in Ihr Programm) die--ldflags
Ausgabe. Beispiel:Das
python-config
Programm kann nach den Python-Versionen benannt werden - unter Debian, Ubuntu zum Beispiel können diese benannt werdenpython3-config
oderpython3.6-config
.quelle
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 ...):
Für lecker (CentOS, RHEL ...):
Für dnf (Fedora ...):
Für Zypper (openSUSE ...):
Für apk (Alpine ...):
quelle
Dies bedeutet, dass dies
Python.h
nicht 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>
.quelle