Debian / Ubuntu: Fatal error: Python.h: No such file or Directory

See all Troubleshooting related FAQ
Wwhen I’am trying to install 3rd party python apps using pip command and getting the following error:
gcc -pthread -fno-strict-aliasing -fwrapv -Wall -Wstrict-prototypes -fPIC -std=c99 -O3 -fomit-frame-pointer -Isrc/ -I/usr/include/python2.7 -c src/MD2.c -o build/temp.linux-x86_64-2.7/src/MD2.o
src/MD2.c:31:20: fatal error: Python.h: No such file or directory
compilation terminated.
error: command 'gcc' failed with exit status 1

So where can I find Python.h file and how do I fix this problem under Debian or Ubuntu Linux sever based system?

Python.h is nothing but a header file. It is used by gcc to build applications. You need to install a package called python-dev or python-${VERSION}-dev. This package includes header files, a static library and development tools for building Python modules, extending the Python interpreter or embedding Python in applications. Let us see how to fix, “Fatal error: Python.h: No such file or Directory” error on a Debian or Ubuntu Linux system.
Tutorial details
Difficulty level Easy
Root privileges Yes
Requirements Linux terminal
Category Package Manager
OS compatibility Debian β€’ Mint β€’ Pop!_OS β€’ Ubuntu
Est. reading time 4 minutes
Advertisement

Debian / Ubuntu: Fatal error: Python.h: No such file or Directory

Currently, most systems have both Python 2.x and 3.x installed. To find the python version, use the type command or command command as follows:
$ type -a python
$ type -a python2
$ type -a python3
$ ls -l /usr/bin/python*
$ ls -l /usr/bin/python* | grep -v '^l'

Now you know the installed Python path on your Debian or Ubuntu Linux and then print the Python version as follows by tying the full shell path for Python:
$ /usr/bin/python2 -V
$ /usr/bin/python3 -V

Use the apt command or apt-cache command:
$ apt-cache search '^python.-*dev'
$ apt search '^python[0-9]*-dev'

You can also use the following grep command to list all possible header files for Python version:
$ apt-cache search ^python | grep -iw header
Finally, you can list header file as per Python version too. For instance, if Python version is 3.8, then
$ apt-cache search ^python | grep -iw '3.8'
$ apt-cache search ^python | grep -i header | grep -iw '3.8'

Finding Python header file packag to install Python.h file

Click to enlarge

Let us install the python version 2.7 or 3.8 header file to eliminate “Fatal error: Python.h: No such file or Directory“. Try the apt-get command or apt-get command as follows to get updates for your Debian and Ubuntu:
$ sudo apt-get update

For Python version 2.x+

Try:
$ sudo apt-get install python-dev
OR
$ sudo apt-get install python2-dev
Sample outputs (for my python 2.x):

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libexpat1-dev libssl-dev libssl-doc python2.7-dev zlib1g-dev
The following NEW packages will be installed:
  libexpat1-dev libssl-dev libssl-doc python-dev python2.7-dev zlib1g-dev
0 upgraded, 6 newly installed, 0 to remove and 2 not upgraded.
Need to get 32.5 MB of archives.
After this operation, 48.2 MB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://mirrors.service.networklayer.com/ubuntu/ precise-updates/main libexpat1-dev amd64 2.0.1-7.2ubuntu1.1 [216 kB]
Get:2 http://mirrors.service.networklayer.com/ubuntu/ precise/main zlib1g-dev amd64 1:1.2.3.4.dfsg-3ubuntu4 [165 kB]
Get:3 http://mirrors.service.networklayer.com/ubuntu/ precise-updates/main libssl-dev amd64 1.0.1-4ubuntu5.5 [1,525 kB]
Get:4 http://mirrors.service.networklayer.com/ubuntu/ precise-updates/main libssl-doc all 1.0.1-4ubuntu5.5 [1,034 kB]
Get:5 http://mirrors.service.networklayer.com/ubuntu/ precise-updates/main python2.7-dev amd64 2.7.3-0ubuntu3.1 [29.5 MB]
Get:6 http://mirrors.service.networklayer.com/ubuntu/ precise/main python-dev amd64 2.7.3-0ubuntu2 [1,088 B]
Fetched 32.5 MB in 1s (21.4 MB/s) 
Selecting previously unselected package libexpat1-dev.
(Reading database ... 55152 files and directories currently installed.)
Unpacking libexpat1-dev (from .../libexpat1-dev_2.0.1-7.2ubuntu1.1_amd64.deb) ...
Selecting previously unselected package zlib1g-dev.
Unpacking zlib1g-dev (from .../zlib1g-dev_1%3a1.2.3.4.dfsg-3ubuntu4_amd64.deb) ...
Selecting previously unselected package libssl-dev.
Unpacking libssl-dev (from .../libssl-dev_1.0.1-4ubuntu5.5_amd64.deb) ...
Selecting previously unselected package libssl-doc.
Unpacking libssl-doc (from .../libssl-doc_1.0.1-4ubuntu5.5_all.deb) ...
Selecting previously unselected package python2.7-dev.
Unpacking python2.7-dev (from .../python2.7-dev_2.7.3-0ubuntu3.1_amd64.deb) ...
Selecting previously unselected package python-dev.
Unpacking python-dev (from .../python-dev_2.7.3-0ubuntu2_amd64.deb) ...
Processing triggers for man-db ...
Setting up libexpat1-dev (2.0.1-7.2ubuntu1.1) ...
Setting up zlib1g-dev (1:1.2.3.4.dfsg-3ubuntu4) ...
Setting up libssl-dev (1.0.1-4ubuntu5.5) ...
Setting up libssl-doc (1.0.1-4ubuntu5.5) ...
Setting up python2.7-dev (2.7.3-0ubuntu3.1) ...
Setting up python-dev (2.7.3-0ubuntu2) ...

For Python version 3.x+

Run:
$ sudo apt-get install python3-dev
That is all. Now, you can compile or build any python based modules without issues. The main thing is to find the correct package name that matches your installed Python version on a Debian or Ubuntu Linux.

Summing up

The python.h header file is a traditional part of the Python programming language’s distribution, so it should be included when you install Python on your system.

  1. First, you find the python path:
    $ type -a python
    $ type -a python2
    $ type -a python3
  2. Then you print the Python version to match python.h header file
    $ /usr/bin/python -V
    $ /usr/bin/python2 -V
    $ /usr/bin/python3 -V
  3. Next, search for the header file package:
    $ apt-cache search '^python.*-dev'
    $ apt-cache search '^python.*-dev' | grep -i header | grep -iw '3.8'
  4. The following apt command will install the Python development files, including the python.h header file for Python version 3.
    $ sudo apt install python3-dev
  5. For Python version 2, try:
    $ sudo apt install python2-dev

Once you have the Python dev package installed, you should be able to find the python.h file includes a directory of your Python installation. For example:
$ find / -type f -iname 'python.h' -ls 2>/dev/null
Here is the output indicating that Python.h is located under /usr/include/python3.8/ or /usr/include/python2.7/ directory:

 11275176      4 -rw-r--r--   1 root     root         3615 Mar 13 15:56 /usr/include/python3.8/Python.h
 11284532      8 -rw-r--r--   1 root     root         4375 Jul 29  2022 /usr/include/python2.7/Python.h
     4464      4 -rw-r--r--   1 root     root         3615 Nov 14 18:29 /snap/certbot/2772/usr/include/python3.8/Python.h
     4464      4 -rw-r--r--   1 root     root         3615 Nov 14 18:29 /snap/certbot/2836/usr/include/python3.8/Python.h

Please note that I appended 2>/dev/null to the find command to avoid permission denied message spam on the screen while searching with find command.

πŸ₯Ί Was this helpful? Please add a comment to show your appreciation or feedback.

nixCrat Tux Pixel Penguin
Hi! 🀠
I'm Vivek Gite, and I write about Linux, macOS, Unix, IT, programming, infosec, and open source. Subscribe to my RSS feed or email newsletter for updates.

31 comments… add one
  • Nooh P P Mar 11, 2014 @ 6:59

    I have installed python-dev but still..
    fatal error: Python.h: No such file or directory
    compilation terminated.

    …:(

    • Kamil Mar 30, 2014 @ 15:10

      Are you using Python3? If so, you have to install python3-dev package.

      • Kunal Feb 1, 2015 @ 10:15

        Yeah you have to use python3-dev

        sudo apt-get install python3-dev

  • naga May 9, 2014 @ 11:28

    src/main/Session.cpp:21:25: fatal error: cms/Session.h: No such file or directory
    compilation terminated.
    error: command ‘gcc’ failed with exit status 1…
    while python setup.py build

  • naga May 9, 2014 @ 11:33

    gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -DBOOST_PYTHON_NO_PY_SIGNATURES=1 -DPYACTIVEMQ_ENABLE_DOCSTRINGS=0 -Ipython_activemq_libs/activemq-cpp-cppVersion/include/activemq-cpp-cppVersion -I/usr/include/python2.7 -c src/main/Session.cpp -o build/temp.linux-x86_64-2.7/src/main/Session.o
    cc1plus: warning: command line option β€˜-Wstrict-prototypes’ is valid for Ada/C/ObjC but not for C++ [enabled by default]
    src/main/Session.cpp:21:25: fatal error: cms/Session.h: No such file or directory
    compilation terminated.
    error: command ‘gcc’ failed with exit status 1

  • sree ph Jun 12, 2014 @ 8:43

    hi i used the following code and got the result as follows
    $ gcc -c arith.c arith_wrap.c \-I/usr/local/include/python2.7
    arith_wrap.c:125:20: fatal error: Python.h: No such file or directory
    compilation terminated.
    ttl@ttl-HP-Z220-CMT-Workstation:~/Documents/first_step_2_swig$

    i did sudo apt-get to install python 2.7 and it showed my library is updated.. the error repeats.. please give some suggestion…

  • Cueto Sep 5, 2014 @ 17:27

    Gracias, me funciuono a la primera

    sudo apt-get install python2.7-dev

  • kostya Dec 5, 2014 @ 19:26

    Thenk you, second time this post help for me :)

  • dubo May 13, 2015 @ 12:32

    Thank you so much !!

  • Krishna Oct 27, 2015 @ 14:41

    I want to install paramiko on redhat machine.I ran these steps.
    1. easy_install pip
    2. pip install paramiko

    It gives the following error(s).

    fatal error: Python.h: No such file or directory
    #include “Python.h”
    ^
    I tried all the alternatives given above but it didn’t work for me . Any help is appreciated.

  • Erie Oct 30, 2015 @ 3:30

    Boom!

  • matt Mar 24, 2016 @ 14:38

    i was getting mad until i read your comment: python3-dev, of course!!!

    lifesaver!

Leave a Reply

Your email address will not be published. Required fields are marked *

Use HTML <pre>...</pre> for code samples. Your comment will appear only after approval by the site admin.