2012-06-14 3 views
17

Ho recentemente installato KDevelop 4 per lo sviluppo C++ sul mio Macbook Pro con Ubuntu 12.04 LTS.Python.h: nessun file o directory

Voglio incorporare l'applicazione Python nel mio codice C++. Per fare ciò, è necessario includere il file di intestazione Python.h. Quindi, l'ho fatto.

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

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

Tuttavia, a correre, ho ricevuto la seguente risposta dall'IDE:

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

Tuttavia, ho trovato il problema abbastanza presto. Non avevo scaricato il pacchetto python-dev. Quindi, l'ho fatto. Ho corso di nuovo ma lo stesso errore era di nuovo lì. Quindi, ho pensato che dovesse essere un problema con il file di intestazione non incluso da KDevelop. Pertanto, ho aggiunto la cartella pertinente al percorso di inclusione e KDevelop ha immediatamente riconosciuto che rimuovendo la sottolineatura rossa sotto la seconda istruzione include nel codice sopra.

Ma ancora, il problema rimane. Ho fatto lo stesso errore. Gradirei qualsiasi aiuto o input voi ragazzi in grado di fornire :-)

Grazie mille.

MODIFICA: alcuni dettagli che ho dimenticato di menzionare prima sono che KDevelop sta usando cmake per il mio progetto. Immagino che il motivo per cui il mio problema si sta verificando sia perché cmake non conosce i percorsi appropriati del compilatore e del linker. Gradirei qualsiasi aiuto nell'impostare i percorsi corretti per cmake.

+0

http://stackoverflow.com/questions/4097339/missing-python-h-while-trying-to-compile-ac-extension -modulo – ddzialak

+0

@ddzialak - Sì, ho dato un'occhiata a questa domanda prima di chiedere questo. Il motivo per cui la domanda non mi ha aiutato è che il mio file Python.h è effettivamente presente in /usr/include/python2.7. L'ho controllato manualmente e quando clicco su Python.h nell'editor, apre il file. –

+0

@ShubhamGoyal puoi aiutarmi con questo? http://stackoverflow.com/questions/31577539/how-can-i-incorporate-cmake-file-when-building-with-distutils-python – mayooran

risposta

24

Nella tua CMakeLists.txt, prova ad aggiungere il seguente:

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

Per i dettagli dei comandi, eseguire:

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

Sì, questo ha funzionato. In realtà, avevo avuto modo di lavorare prima di vedere la tua risposta e dopo aver letto molto su CMake, ma la soluzione è la stessa: D –

+0

Ecco il link al mio file CMakeLists.txt - http: //paste.ubuntu. it/1042894/ –

+0

@ShubhamGoyal Bello. Infatti guardando il tuo CMakeList.txt mi hai fatto notare che ho dimenticato una serie di parentesi graffe nella mia risposta originale! Risolto ora. – Fraser

4

Molto probabilmente Python.h non è incluso nel percorso di inclusione dei sistemi di build. È possibile scoprire dove il vostro Python.h è quello di eseguire

dpkg -L python-dev | grep Python.h 

Questo sarà anche verificare che il pacchetto python-dev effettivamente installato un Python.h.

Non ho un kdevelop qui, ma la maggior parte degli IDE ha un'impostazione da qualche parte dove è possibile specificare il percorso di inclusione utilizzato dal sistema di generazione e dovresti essere in grado di aggiungere il percorso in cui si trova Python.h.

EDIT:

Come implicita Nikolai, sarà anche necessario aggiungere il percorso libreria corretta per la fase di collegamento. (Output di python-config --ldflags).

+0

Ho confermato che il pacchetto python-dev ha installato i file Python.h. Il problema è che non so dove o come aggiungere i percorsi di libreria corretti in cmake. Gradirei qualsiasi aiuto su quel fronte. Sono un principiante assoluto in cmake. La prima volta che ho sentito il termine è stato dopo aver postato questa domanda. –

10

si desidera includere la seguente sulla riga di compilazione:

`python-config --cflags` 

e questo sulla linea link:

`python-config --ldflags` 
+0

Mi dispiace se sono un noob qui, ma potresti per favore approfondire cosa intendi con la linea di compilazione e la linea di collegamento in questo caso? Dal momento che sto usando l'IDE, non sto compilando e collegando sul terminale. –

+1

L'IDE ha impostazioni da qualche parte per includere percorsi, percorsi di libreria e flag di compilatore e linker. Esegui i comandi sopra - il primo ti dà le direttive '-I' (include i percorsi) e i flag del compilatore, il secondo fa lo stesso per il linker. Metti quelli in impostazioni appropriate nel tuo IDE. –

+0

Hmm ... KDevelop sta usando cmake per il mio progetto. Ma non ho mai usato cmake prima e apprezzerei un po 'di aiuto nell'impostare i percorsi lì. –

27
sudo apt-get install python2.7-dev 

ha funzionato per me su un "Python.h: No such file or directory" questione

+0

Confermato che funziona ancora sui test Debian al 26.10.13. – timss

+0

Ecco cosa mi ha aiutato in CentOS: 'sudo yum search python' per trovare il pacchetto -devel appropriato, quindi' sudo yum install python26-devel.x86_64' per la mia versione specifica di Python. –

0

Per Linux Ubuntu Putty Utenti provare questo:

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

quindi compilarlo

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

quindi eseguirlo

./check 
1

suppongo che è già installato. Trova il percorso con:

find/-iname python.h 

e quando lo avete fatto, quando si compila aggiungere

-I python_h_path