I have Python on my Ubuntu system, but gcc can't find Python.h

PythonCUbuntuHeader

Python Problem Overview


I am on a school computer, so I can't install anything.

I am trying to create C code which can be run in Python. It seems all the articles I am finding on it require you to use

#include <Python.h>

I do this, but when I compile it complains that there is no such file or directory.

The computer has Python (at least it has the python command in the terminal, and we can run whatever Python code we want).

I typed in locate Python.h in the terminal, but it found nothing.

I have two questions:

  1. Can I write C code that I can call in Python without Python.h?

  2. Am I missing something, and the computer actually has Python.h?

Python Solutions


Solution 1 - Python

You need the python-dev package which contains Python.h

Solution 2 - Python

On Ubuntu, you would need to install a package called python-dev. Since this package doesn't seem to be installed (locate Python.h didn't find anything) and you can't install it system-wide yourself, we need a different solution.

You can install Python in your home directory -- you don't need any special permissions to do this. If you are allowed to use a web browser and run a gcc, this should work for you. To this end

  1. Download the source tarball.

  2. Unzip with

    tar xjf Python-2.7.2.tar.bz2
    
  3. Build and install with

    cd Python-2.7.2
    ./configure --prefix=/home/username/python --enable-unicode=ucs4
    make
    make install
    

Now, you have a complete Python installation in your home directory. Pass -I /home/username/python/include to gcc when compiling to make it aware of Python.h. Pass -L /home/username/python/lib and -lpython2.7 when linking.

Solution 3 - Python

You have to use #include "python2.7/Python.h" instead of #include "Python.h".

Solution 4 - Python

For Ubuntu 15.10 and Python 3, comming to this question as they don't have Python.h but having administrative rights, the following might solve it:

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 5 - Python

On ubuntu you can just type sudo apt-get install python-dev -y in terminal to install the python-dev package.

Solution 6 - Python

I found the answer in ubuntuforums (ubuntuforums), you can just add this to your gcc '$(python-config --includes)'

gcc $(python-config --includes) urfile.c

Solution 7 - Python

The header files are now provided by libpython2.7-dev.

You can use the search form at packages.ubuntu.com to find out what package provides Python.h.

Solution 8 - Python

You need python-dev installed.
For Ubuntu :

sudo apt-get install python-dev   # for python2.x installs
sudo apt-get install python3-dev  # for python3.x installs

For more distros, refer -
https://stackoverflow.com/a/21530768/6841045

Solution 9 - Python

I ran into the same issue while trying to build a very old copy of omniORB on a CentOS 7 machine. Resolved the issue by installing the python development libraries:

# yum install python-devel

This installed the Python.h into:

/usr/include/python2.7/Python.h

Solution 10 - Python

It happens because Python.h is not located in the default include folder (which is /usr/include/ ).

Installing Python-dev might help:

$ sudo apt-get install python-dev 

But mostly the problem will persist because the development packages are made inside a separate folder inside the include folder itself ( /usr/include/python2.7 or python3).

So you should either specify the library folder using -I option in gcc or by creating soft-links to everything inside those folders to just outside (I'd prefer the former option).

Using -I option in gcc:

$ gcc -o hello -I /usr/include/python2.7 helloworld.c

Creating soft-links :

$ sudo ln -sv /usr/include/python2.7/* /usr/include/

Solution 11 - Python

locate Python.h

If the output is empty, then find your python version

python --version

lets say it is X.x i.e 2.7 or 3.6, 3.7, 3.8 Then with the same version install header files and static libraries for python

sudo apt-get install pythonX.x-dev

Solution 12 - Python

Go to Synaptic package manager. Reload -> Search for python -> select the python package you want -> Submit -> Install Works for me ;)

Exactly, the package you need to install is python-dev.

Solution 13 - Python

That means you are not install libraries for python dev.

If you are on Linux OS, you can solve this issue by commands separately below:

  • Ubuntu (Debian) :

    sudo apt-get install python-dev (Py2) or sudo apt-get install python3-dev (Py3)

  • Rehat (CentOS):

    yum install python-devel

Solution 14 - Python

None of the answers worked for me. If you are running on Ubuntu, you can try:

With python3:

sudo apt-get install python3 python-dev python3-dev \
     build-essential libssl-dev libffi-dev \
     libxml2-dev libxslt1-dev zlib1g-dev \
     python-pip

With Python 2:

sudo apt-get install python-dev  \
     build-essential libssl-dev libffi-dev \
     libxml2-dev libxslt1-dev zlib1g-dev \
     python-pip

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser979344View Question on Stackoverflow
Solution 1 - PythonAndrew MarshView Answer on Stackoverflow
Solution 2 - PythonSven MarnachView Answer on Stackoverflow
Solution 3 - PythonKuchhuView Answer on Stackoverflow
Solution 4 - PythonMartin ThomaView Answer on Stackoverflow
Solution 5 - PythondanielcooperxyzView Answer on Stackoverflow
Solution 6 - PythonMohamed chakib BelgaidView Answer on Stackoverflow
Solution 7 - PythonunutbuView Answer on Stackoverflow
Solution 8 - PythonvedipenView Answer on Stackoverflow
Solution 9 - Pythonuser3892260View Answer on Stackoverflow
Solution 10 - PythonPunyCodeView Answer on Stackoverflow
Solution 11 - PythonGraphicalDotView Answer on Stackoverflow
Solution 12 - PythonthathashdView Answer on Stackoverflow
Solution 13 - PythonLittle RoysView Answer on Stackoverflow
Solution 14 - PythonCanciuCostinView Answer on Stackoverflow