Python.h header file missing on Mac OS X 10.6
Question:
I’m trying to access a shared C library in Python with ctypes
on Mac OS X 10.6.8 with Python 2.7.4. To do this, I need to #include <Python.h>
in my C code. If I try to compile a C script that only has that one include statement in it, call it “sample.c”, I get:
$ gcc -shared -o sample.so sample.c
sample.c:1:20: error: Python.h: No such file or directory
Since I’m running Mac 10.6, I have Xcode 3.2.6, the latest version available on this iteration of OS X without paying to upgrade to 10.7 and getting Xcode 4. Is there a way to get the Python header file without upgrading my OS?
Answers:
I’m not sure about 10.6.8, but Python.h
should be in
/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7
if you installed the official python.org binary. Try adding
-I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7
to your gcc
command and see if that works.
Python is a framework on Mac OS X so you need to,
#include <Python/Python.h>
You also need to call gcc
with the -framework
argument to actually do anything inside C,
gcc -shared -o sample.so sample.c -framework Python
In case you have installed Python using Brew, it may be worthwhile to check the location of where your headers are.
Try I/usr/local/Cellar/python/...
Another way is to add `python-config --include`
to the gcc
call. It will expand to -I/usr/...
, so
gcc -shared -o sample.so sample.c `python-config --include`
Also other options can be retrieved, such as `python-config --cflags --ldflags`
.
python-config
or python3-config
is typically available after brew install python
. Backticks are bash
-specific. To see what it would output (e.g., when one doesn’t use bash
) use
python-config --include
My problem was solved by install Xcode command line tools with:
xcode-select --install
I’m trying to access a shared C library in Python with ctypes
on Mac OS X 10.6.8 with Python 2.7.4. To do this, I need to #include <Python.h>
in my C code. If I try to compile a C script that only has that one include statement in it, call it “sample.c”, I get:
$ gcc -shared -o sample.so sample.c
sample.c:1:20: error: Python.h: No such file or directory
Since I’m running Mac 10.6, I have Xcode 3.2.6, the latest version available on this iteration of OS X without paying to upgrade to 10.7 and getting Xcode 4. Is there a way to get the Python header file without upgrading my OS?
I’m not sure about 10.6.8, but Python.h
should be in
/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7
if you installed the official python.org binary. Try adding
-I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7
to your gcc
command and see if that works.
Python is a framework on Mac OS X so you need to,
#include <Python/Python.h>
You also need to call gcc
with the -framework
argument to actually do anything inside C,
gcc -shared -o sample.so sample.c -framework Python
In case you have installed Python using Brew, it may be worthwhile to check the location of where your headers are.
Try I/usr/local/Cellar/python/...
Another way is to add `python-config --include`
to the gcc
call. It will expand to -I/usr/...
, so
gcc -shared -o sample.so sample.c `python-config --include`
Also other options can be retrieved, such as `python-config --cflags --ldflags`
.
python-config
or python3-config
is typically available after brew install python
. Backticks are bash
-specific. To see what it would output (e.g., when one doesn’t use bash
) use
python-config --include
My problem was solved by install Xcode command line tools with:
xcode-select --install