2012-06-14 64 views
17

Recientemente instalé KDevelop 4 para desarrollo C++ en mi Macbook Pro con Ubuntu 12.04 LTS.Python.h: No existe ningún archivo o directorio

Quiero incrustar la aplicación Python en mi código C++. Para hacer eso, uno necesita incluir el archivo de encabezado Python.h. Entonces, hice eso.

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

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

Sin embargo, en el funcionamiento, que recibió la siguiente respuesta desde el IDE:

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

Sin embargo, he encontrado el problema pronto. No había descargado el paquete python-dev. Entonces, hice eso. Corrí de nuevo pero el mismo error estaba allí de nuevo. Por lo tanto, pensé que debe ser un problema con el archivo de encabezado no incluido por KDevelop. Por lo tanto, agregué la carpeta relevante a la ruta de inclusión y KDevelop inmediatamente reconoció eso al eliminar el subrayado rojo debajo de la segunda instrucción de inclusión en el código anterior.

Pero aún así, el problema persiste. Me sale el mismo error. Agradecería cualquier ayuda o aportaciones que ustedes puedan proporcionar :-)

Muchas gracias.

EDITAR: Algunos detalles que eché de menos mencionar anteriormente son que KDevelop está utilizando cmake para mi proyecto. Supongo que la razón por la cual mi problema está ocurriendo es porque cmake no conoce las rutas adecuadas del compilador y del enlazador. Agradecería cualquier ayuda para establecer las rutas correctas para cmake.

+0

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

+0

@ddzialak - Sí, eché un vistazo a esa pregunta antes de hacer esta. La razón por la que esa pregunta no me ayudó es que mi archivo Python.h está realmente presente en /usr/include/python2.7. Lo comprueve manualmente y cuando hago clic en Python.h en el editor, abre el archivo. –

+0

@ShubhamGoyal ¿me pueden ayudar con esto? http://stackoverflow.com/questions/31577539/how-can-i-incorporate-cmake-file-when-building-with-distutils-python – mayooran

Respuesta

24

En su CMakeLists.txt, trate de añadir lo siguiente:

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

Para detalles de los comandos, ejecute:

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

Sí, esto funcionó. En realidad, lo había hecho funcionar antes de ver su respuesta y después de leer mucho sobre CMake, pero la solución es la misma: D –

+0

Aquí está el enlace a mi archivo CMakeLists.txt - http: //paste.ubuntu. com/1042894/ –

+0

@ShubhamGoyal Nice one. ¡Verdaderamente tu CMakeLists.txt me hizo notar que olvidé un par de llaves en mi respuesta original! Corregido ahora. – Fraser

4

Lo más probable es que Python.h no esté en la ruta de inclusión de los sistemas de compilación. Puede averiguar cuál es su Python.h está ejecutando

dpkg -L python-dev | grep Python.h 

Esto también verificará que el paquete python-dev instalado realmente un Python.h.

No tengo kdevelop aquí, pero la mayoría de los IDE tienen una configuración en algún lugar donde puede especificar la ruta de inclusión utilizada por el sistema de compilación, y debería poder agregar la ruta donde se encuentra Python.h.

EDIT:

Como implicaba Nikolai, también tendrá que añadir la ruta de la biblioteca correcta para la etapa de vinculación. (Salida de python-config --ldflags).

+0

He confirmado que el paquete python-dev instaló los archivos Python.h. El problema es que no sé dónde ni cómo agregar las rutas correctas de la biblioteca en cmake. Agradecería cualquier ayuda en ese frente. Soy un principiante completo en cmake. La primera vez que escuché el término fue después de publicar esta pregunta. –

10

desea incluir lo siguiente en la línea de compilación:

`python-config --cflags` 

y esto en la línea de enlace:

`python-config --ldflags` 
+0

Lo siento si estoy siendo un novato aquí, pero ¿podría explicar qué quiere decir con la línea de compilación y la línea de enlace en este caso? Como uso el IDE, no estoy compilando ni enlazando el terminal. –

+1

Su IDE tiene configuraciones en alguna parte para incluir rutas de acceso, rutas de biblioteca y compiladores y marcadores de enlazadores. Ejecute los comandos anteriores: el primero le otorga las directivas '-I' (incluya rutas) y los indicadores del compilador, el segundo hace lo mismo con el enlazador. Ponlos en la configuración apropiada en tu IDE. –

+0

Hmm ... KDevelop está usando cmake para mi proyecto. Pero nunca antes había usado cmake y agradecería algo de ayuda para establecer los caminos allí. –

27
sudo apt-get install python2.7-dev 

funcionó para mí en un "Python.h: No existe el fichero o directorio" cuestión

+0

Se confirmó que todavía estaba trabajando en las pruebas de Debian a partir del 26.10.13. – timss

+0

Esto es lo que me ayudó en CentOS: 'sudo yum search python' para encontrar el paquete apropiado -devel, luego' sudo yum install python26-devel.x86_64' para mi versión específica de Python. –

0

Para usuarios de Linux Ubuntu Masilla Prueba esto:

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

luego compilarlo

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

luego ejecutarlo

./check 
1

Asumo que ya está instalado. Busque la ruta con:

find/-iname python.h 

y cuando lo ha hecho, al compilar añadir

-I python_h_path 
Cuestiones relacionadas