Example Installation
The Cython module will be compiled at install time
python3.4 -m venv env
source env/bin/activate
pip install -U pip cython
pip install .
| # Byte-compiled / optimized / DLL files | |
| __pycache__/ | |
| *.py[cod] | |
| *$py.class | |
| # C extensions | |
| *.so | |
| # Distribution / packaging | |
| .Python | |
| env/ | |
| build/ | |
| develop-eggs/ | |
| dist/ | |
| downloads/ | |
| eggs/ | |
| .eggs/ | |
| lib/ | |
| lib64/ | |
| parts/ | |
| sdist/ | |
| var/ | |
| *.egg-info/ | |
| .installed.cfg | |
| *.egg | |
| # PyInstaller | |
| # Usually these files are written by a python script from a template | |
| # before PyInstaller builds the exe, so as to inject date/other infos into it. | |
| *.manifest | |
| *.spec | |
| # Installer logs | |
| pip-log.txt | |
| pip-delete-this-directory.txt | |
| # Unit test / coverage reports | |
| htmlcov/ | |
| .tox/ | |
| .coverage | |
| .coverage.* | |
| .cache | |
| nosetests.xml | |
| coverage.xml | |
| *,cover | |
| .hypothesis/ | |
| # Translations | |
| *.mo | |
| *.pot | |
| # Django stuff: | |
| *.log | |
| local_settings.py | |
| # Flask stuff: | |
| instance/ | |
| .webassets-cache | |
| # Scrapy stuff: | |
| .scrapy | |
| # Sphinx documentation | |
| docs/_build/ | |
| # PyBuilder | |
| target/ | |
| # IPython Notebook | |
| .ipynb_checkpoints | |
| # pyenv | |
| .python-version | |
| # celery beat schedule file | |
| celerybeat-schedule | |
| # dotenv | |
| .env | |
| # virtualenv | |
| venv/ | |
| ENV/ | |
| # Spyder project settings | |
| .spyderproject | |
| # Rope project settings | |
| .ropeproject |
| // Rectangle.cpp | |
| #include "rectangle.h" | |
| using namespace shapes; | |
| Rectangle::Rectangle(int X0, int Y0, int X1, int Y1) | |
| { | |
| x0 = X0; | |
| y0 = Y0; | |
| x1 = X1; | |
| y1 = Y1; | |
| } | |
| Rectangle::~Rectangle() | |
| { | |
| } | |
| int Rectangle::getLength() | |
| { | |
| return (x1 - x0); | |
| } | |
| int Rectangle::getHeight() | |
| { | |
| return (y1 - y0); | |
| } | |
| int Rectangle::getArea() | |
| { | |
| return (x1 - x0) * (y1 - y0); | |
| } | |
| void Rectangle::move(int dx, int dy) | |
| { | |
| x0 += dx; | |
| y0 += dy; | |
| x1 += dx; | |
| y1 += dy; | |
| } |
| // Rectangle.h | |
| namespace shapes { | |
| class Rectangle { | |
| public: | |
| int x0, y0, x1, y1; | |
| Rectangle(int x0, int y0, int x1, int y1); | |
| ~Rectangle(); | |
| int getLength(); | |
| int getHeight(); | |
| int getArea(); | |
| void move(int dx, int dy); | |
| }; | |
| } |
| # rectangle.pyx | |
| cdef extern from "rectangle.h" namespace "shapes": | |
| cdef cppclass Rectangle: | |
| Rectangle(int, int, int, int) | |
| int x0, y0, x1, y1 | |
| int getLength() | |
| int getHeight() | |
| int getArea() | |
| void move(int, int) | |
| cdef class PyRectangle: | |
| cdef Rectangle *thisptr # hold a C++ instance which we're wrapping | |
| def __cinit__(self, int x0, int y0, int x1, int y1): | |
| self.thisptr = new Rectangle(x0, y0, x1, y1) | |
| def __dealloc__(self): | |
| del self.thisptr | |
| def getLength(self): | |
| return self.thisptr.getLength() | |
| def getHeight(self): | |
| return self.thisptr.getHeight() | |
| def getArea(self): | |
| return self.thisptr.getArea() | |
| def move(self, dx, dy): | |
| self.thisptr.move(dx, dy) | |
| # setup.py | |
| from distutils.core import setup | |
| from distutils.extension import Extension | |
| from Cython.Distutils import build_ext | |
| setup( | |
| name='rectangle-example', | |
| ext_modules=[ | |
| # the .pyx file may not have the same name as the .cpp file | |
| Extension("rectangle", ["rectangle_.pyx", "rectangle.cpp"], language="c++",) | |
| ], | |
| cmdclass = {'build_ext': build_ext} | |
| ) |
Uh oh!
There was an error while loading. Please reload this page.