2014-09-17 1 views
6

Я пытаюсь скомпилировать простой Python/C пример после этого урока:Python.h не найдено с помощью глотнул и Anaconda Python

http://www.swig.org/tutorial.html

Я на MacOS с помощью Anaconda питона.

Однако, когда я бегу

gcc -c example.c example_wrap.c -I/Users/myuser/anaconda/include/ 

я получаю:

example_wrap.c:130:11: fatal error: 'Python.h' file not found 
# include <Python.h> 
     ^

Кажется, что эта проблема, как сообщается в ряде вопросов:

Missing Python.h while trying to compile a C extension module

Missing Python.h and impossible to find

Python.h: No such file or directory

но никто, кажется, дают ответ на конкретный Anaconda на MacOS

Любой решить это?

ответ

13

Используйте команду -I/Users/myuser/anaconda/include/python2.7 в команде gcc. (Это предполагает, что вы используете Python 2.7 Измените имя, чтобы соответствовать версии питона, который вы используете.). Вы можете использовать команду python-config --cflags, чтобы получить полный набор рекомендуемых флагах компиляции:

$ python-config --cflags 
-I/Users/myuser/anaconda/include/python2.7 -I/Users/myuser/anaconda/include/python2.7 -fno-strict-aliasing -I/Users/myuser/anaconda/include -arch x86_64 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes 

Однако, чтобы создайте модуль расширения, я рекомендую использовать простой сценарий установки, например, следующий setup.py, и пусть distutils выяснит все параметры компиляции и компоновки для вас.

# setup.py 

from distutils.core import setup, Extension 


example_module = Extension('_example', sources=['example_wrap.c', 'example.c']) 

setup(name='example', ext_modules=[example_module], py_modules=["example"]) 

Затем вы можете запустить:

$ swig -python example.i 
$ python setup.py build_ext --inplace 

(Посмотрите на команды компилятора, которые отражаемых к терминалу, когда setup.py запускается.)

distutils знает о SWIG, так что вместо включая example_wrap.c в списке исходных файлов, вы можете включить example.i, а swig будет автоматически запускаться сценарием установки:

# setup.py 

from distutils.core import setup, Extension 


example_module = Extension('_example', sources=['example.c', 'example.i']) 

setup(name='example', ext_modules=[example_module], py_modules=["example"]) 

С выше версии setup.py, вы можете создать модуль расширения с одной командой

$ python setup.py build_ext --inplace 

После того, как вы создали модуль расширения, вы должны быть в состоянии использовать его в питон:

>>> import example 
>>> example.fact(5) 
120 

Если вы не хотите использовать скрипт setup.py, вот набор команд, которые работали для меня:

$ swig -python example.i 
$ gcc -c -I/Users/myuser/anaconda/include/python2.7 example.c example_wrap.c 
$ gcc -bundle -undefined dynamic_lookup -L/Users/myuser/anaconda/lib example.o example_wrap.o -o _example.so 

Примечание: Я использую Mac OS X 10.9.4:

$ gcc --version 
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn) 
Target: x86_64-apple-darwin13.3.0 
Thread model: posix 
+0

Фантастический! Это сработало. Очень четкое объяснение! Спасибо – Fra

+0

Спасибо, что поделились советами по использованию setup.py ~~ Он работает для меня на mac osx 10.11 ~~ – zhkzyth

 Смежные вопросы

  • Нет связанных вопросов^_^