I have Python on my Ubuntu system, but gcc can'

2019-01-06 10:58发布

问题:

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?

回答1:

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



回答2:

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.



回答3:

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



回答4:

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


回答5:

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



回答6:

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.



回答7:

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



回答8:

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



回答9:

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

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


回答10:

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.



回答11:

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



回答12:

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/