Python.h: No such file or directory

Each Answer to this Q is separated by one/two green lines.

I recently installed KDevelop 4 for C++ development on my Macbook Pro running Ubuntu 12.04 LTS.

I want to embed Python application in my C++ code. To do that, one needs to include the Python.h header file. So, I did that.

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

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

However, on running, I received the following response from the IDE:

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

However, I found the problem soon enough. I hadn’t downloaded the python-dev package. So, I did that. I ran again but the same error was there again. So, I thought it must be an issue with the header file not being included by KDevelop. Thus, I added the relevant folder to the include path and KDevelop immediately recognized that by removing the red underline beneath the second include statement in the code above.

But still, the problem remains. I get the same error. Would appreciate any help or inputs you guys can provide 🙂

Thanks a lot.

EDIT: Some details that I missed mentioning earlier are that KDevelop is using cmake for my project. I guess the reason my problem is occurring is because cmake doesn’t know the appropriate compiler and linker paths. I would appreciate any help in setting the correct paths for cmake.

In your CMakeLists.txt, try adding the following:

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

For details of the commands, run:

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

sudo apt-get install pythonX.X-dev

For example for 3.8

sudo apt-get install python3.8-dev

Thank you Cristianjs19 for the comment.

Original Answer:

sudo apt-get install python2.7-dev

worked for me on a “Python.h: No such file or directory” issue

You want to include the following on the compile line:

`python-config --cflags`

and this on the link line:

`python-config --ldflags`

Most likely Python.h is not in your build systems’ include path. You can find out where your Python.h is by running

dpkg -L python-dev | grep Python.h

This will also verify that the python-dev package actually installed a Python.h.

I don’t have a kdevelop here, but most IDEs have a setting somewhere where you can specify the include path used by the build system, and you should be able to add the path where Python.h lies there.

EDIT:

As Nikolai implied, you will also need to add the correct library path for the linking stage. (Output of python-config –ldflags).

For Linux Ubuntu Putty Users try this:

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

then compile it

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

then run it

./check 

I assume that it is already installed. Find the path with:

find / -iname python.h

and when you have done so, when compiling add

-I python_h_path


The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .