Используйте команду -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
Фантастический! Это сработало. Очень четкое объяснение! Спасибо – Fra
Спасибо, что поделились советами по использованию setup.py ~~ Он работает для меня на mac osx 10.11 ~~ – zhkzyth