fatal error :"python.h" no file or directory?

While looking for a solution for the Hungarian problem, I found this GitHub link.

I went through the readme.md file and I performed everything described there. After copying hungarian.so into my working directory, when I tried to compile hungarian.cpp using make hungarian, I got this output:

anupam@JAZZ:~/Python/hungarian-master$ make hungarian
g++     hungarian.cpp   -o hungarian
hungarian.cpp:7:20: fatal error: Python.h: No such file or directory
 #include "Python.h"
                    ^
compilation terminated.
make: *** [hungarian] Error 1

I found this related question on Stack Overflow, but the answer didn't work for me.

I am very new to GitHub I don't know how to add modules on g++. Can someone help me with that, and what to do next?


Solution 1:

For Ubuntu 15.10 and Python 3:

sudo apt-get install python-dev
sudo apt-get install python3-dev
sudo apt-get install libpython3-dev
sudo apt-get install libpython3.4-dev
sudo apt-get install libpython3.5-dev

Solution 2:

After looking at https://github.com/hrldcpr/hungarian/blob/master/hungarian.cpp, it seems that you need both:

#include "Python.h"
#include "numpy/arrayobject.h"

So install the following packages:

sudo apt-get install libpython2.7-dev python-numpy

To identify the missing packages (the ones providing the headers), look at packages.ubuntu.com.

Solution 3:

This is python code extending with C. No need to use make. Python itself will take care of the cpp code compilation with proper flags.

First you need to have header files and a static library. Install those as,

sudo apt-get install python-dev

Now follow these commands to execute example.py in your code.

python setup.py build
cp  build/lib.linux-i686-2.7/hungarian.so .
python example.py

Note: I am using python2.7, you should take care of your version of python when execute the above commands. It is worth mentioning that you need to install python-numpy if you not have it as python script need it.