Verwenden Sie die Option -I/Users/myuser/anaconda/include/python2.7
im Befehl gcc
. (Das ist vorausgesetzt, Sie verwenden Python 2.7 Ändern Sie den Namen, die Version von Python entsprechen, die Sie verwenden.). Sie können mit dem Befehl python-config --cflags
den vollen Satz von empfohlenen Kompilation Fahnen zu erhalten:
$ 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
jedoch zu Erstellen Sie das Erweiterungsmodul, ich empfehle die Verwendung eines einfachen Setup-Skript, wie die folgenden setup.py
, und lassen Sie distutils
herauszufinden, alle kompilieren und verknüpfen Optionen für Sie.
# 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"])
Dann können Sie laufen:
$ swig -python example.i
$ python setup.py build_ext --inplace
(an den Compiler Befehle Werfen Sie einen Blick, die an das Terminal hallte, wenn setup.py
ausgeführt wird.)
distutils
über SWIG weiß, so dass statt von einschließlich example_wrap.c
in der Liste der Quelldateien können Sie example.i
einschließen, und swig
wird automatisch durch das Setup-Skript ausgeführt:
# 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"])
Mit der obigen Version von setup.py
, können Sie das Erweiterungsmodul mit dem einzigen Befehl
$ python setup.py build_ext --inplace
bauen Sobald Sie das Erweiterungsmodul erstellt haben, sollten Sie in der Lage sein, es zu benutzen in Python:
>>> import example
>>> example.fact(5)
120
Wenn Sie lieber das Skript nicht setup.py
verwenden würde, ist hier ein Satz von Befehlen, die für mich gearbeitet:
$ 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
Hinweis: Ich verwende 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
Fantastisch! Es funktionierte. Sehr klare Erklärung! Danke – Fra
Danke für die Nutzung der Tipps von setup.py ~~ Es funktioniert für mich auf Mac OSX 10.11 ~~ – zhkzyth