2012-06-14 18 views
17

Ich habe vor kurzem KDevelop 4 für C++ - Entwicklung auf meinem Macbook Pro mit Ubuntu 12.04 LTS installiert.Python.h: Keine solche Datei oder Verzeichnis

Ich möchte Python-Anwendung in meinem C++ - Code einbetten. Dazu muss die Python.h-Headerdatei hinzugefügt werden. Also, das habe ich getan.

#include <iostream> 
#include <Python.h> 

int main(int argc, char **argv) { 
    Py_Initialize(); 
    return 0; 
} 

jedoch auf Laufen, erhielt ich folgende Antwort von der IDE:

fatal error: Python.h: No such file or directory 

Allerdings habe ich das Problem früh genug gefunden. Ich hatte das python-dev-Paket nicht heruntergeladen. Also, das habe ich getan. Ich rannte wieder, aber der gleiche Fehler war wieder da. Also, ich dachte, es muss ein Problem mit der Header-Datei sein, die nicht von KDevelop enthalten ist. Daher habe ich den entsprechenden Ordner zum Include-Pfad hinzugefügt, und KDevelop erkannte dies sofort, indem ich die rote Unterstreichung unter der zweiten Include-Anweisung im obigen Code entfernte.

Aber immer noch bleibt das Problem bestehen. Ich bekomme den gleichen Fehler. Würde mich über jede Hilfe oder Eingaben freuen, die ihr euch leisten könnt :-)

Vielen Dank.

EDIT: Einige Details, die ich verpasste, erwähnt, dass KDevelop CMake für mein Projekt verwendet. Ich vermute, der Grund, warum mein Problem auftritt, liegt darin, dass cmake die entsprechenden Compiler- und Linker-Pfade nicht kennt. Ich würde jede mögliche Hilfe bei der Festlegung der korrekten Wege für cmake schätzen.

+0

hinzufügen Kompilieren http://stackoverflow.com/questions/4097339/missing-python-h-while-trying-to-compile-ac-extension -module – ddzialak

+0

@ddzialak - Ja, ich habe mir diese Frage angesehen, bevor ich diese Frage gestellt habe. Der Grund, warum die Frage mir nicht geholfen hat, ist, dass meine Python.h-Datei tatsächlich unter /usr/include/python2.7 vorhanden ist. Ich habe es manuell überprüft und wenn ich im Editor auf Python.h klicke, wird die Datei geöffnet. –

+0

@ShubhamGoyal können Sie mir dabei helfen? http://stackoverflow.com/questions/31577539/how-can-i-incorporate-cmake-file-when-building-with-distutils-python – mayooran

Antwort

24

In Ihrem CMakeLists.txt, versuchen Sie, die folgenden:

find_package(PythonLibs REQUIRED) 
include_directories(${PYTHON_INCLUDE_DIRS}) 
target_link_libraries(<your exe or lib> ${PYTHON_LIBRARIES}) 

Weitere Informationen zu den Befehlen finden Sie unter:

cmake --help-module FindPythonLibs 
cmake --help-command find_package 
cmake --help-command include_directories 
cmake --help-command target_link_libraries 
+0

Ja, das hat funktioniert. Eigentlich hatte ich es zu arbeiten, bevor Sie Ihre Antwort und nach viel lesen auf CMake, aber die Lösung ist die gleiche: D –

+0

Hier ist der Link zu meiner CMakeLists.txt-Datei - http: //paste.ubuntu. com/1042894/ –

+0

@SubhamGoyal Nice one. In der Tat, als ich Ihre CMakeLists.txt ansah, bemerkte ich, dass ich eine Reihe von Klammern in meiner ursprünglichen Antwort vergessen hatte! Jetzt behoben. – Fraser

4

Am wahrscheinlichsten ist Python.h nicht in Ihrem Build-System Include-Pfad. Sie können herausfinden, wo Ihre Python.h von

läuft
dpkg -L python-dev | grep Python.h 

Dies wird auch überprüfen, dass die Python-dev Paket tatsächlich eine Python.h installiert.

Ich habe hier kein kdevelop, aber die meisten IDEs haben irgendwo eine Einstellung, wo Sie den Include-Pfad angeben können, der vom Build-System verwendet wird, und Sie sollten den Pfad hinzufügen können, in dem Python.h liegt.

EDIT:

Wie Nikolai implizierte, müssen Sie auch den richtigen Bibliothekspfad für die Verknüpfung Stufe hinzuzufügen. (Ausgabe von python-config --ldflags)

+0

Ich habe bestätigt, dass python-dev-Paket die Python.h-Dateien installiert hat. Das Problem ist, ich weiß nicht, wo oder wie die richtigen Bibliothekspfade in cmake hinzugefügt werden. Würde jede Hilfe an dieser Front schätzen. Ich bin ein kompletter Anfänger in CMake. Das erste Mal, dass ich den Begriff gehört habe, war nach dem Posten dieser Frage. –

10

Sie möchten die folgenden auf der Kompilierung Zeile enthalten:

`python-config --cflags` 

und dies auf der Verbindungslinie:

`python-config --ldflags` 
+0

Es tut mir leid, wenn ich hier ein Noob bin, aber könnten Sie bitte in diesem Fall erläutern, was Sie mit der Compile-Zeile und der Link-Zeile meinen? Da ich die IDE verwende, kompiliere und verlinke ich nicht auf dem Terminal. –

+1

Ihre IDE verfügt über Einstellungen für Include-Pfade, Bibliothekspfade sowie Compiler- und Linker-Flags. Führen Sie die oben genannten Befehle aus - der erste Befehl gibt Ihnen "-I" -Direktiven (include-Pfade) und Compiler-Flags, der zweite Befehl macht dasselbe für den Linker. Setzen Sie diese in entsprechende Einstellungen in Ihrer IDE. –

+0

Hmm ... KDevelop benutzt Cmake für mein Projekt. Aber ich habe CMake noch nie zuvor benutzt und wäre dankbar für die Hilfe bei der Einrichtung der Pfade. –

27
sudo apt-get install python2.7-dev 

arbeitete für mich auf einem "Python.h: Keine solche Datei oder das Verzeichnis“-Ausgabe

+0

Bestätigt noch am Debian-Test arbeiten am 26.10.13. – timss

+0

Hier ist, was mir in CentOS geholfen hat: 'sudo yum search python', um das richtige Paket -devel zu finden, dann' sudo yum install python26-devel.x86_64' für meine spezifische Version von Python. –

0

Für Linux Ubuntu Putty Benutzer versuchen Sie dies:

sudo apt-get update 
sudo apt-get install python-dev 

dann kompilieren

gcc -o check xyz.c -I/usr/include/python2.7/ -lpython2.7 

dann führen Sie es

./check 
1

Ich gehe davon aus dass es bereits installiert ist Suchen Sie den Pfad mit:

find/-iname python.h 

und wenn Sie dies getan haben, wenn

-I python_h_path