User Tools

Site Tools


python

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
python [2014/12/28 09:08] dongheepython [2018/07/18 14:10] (current) – external edit 127.0.0.1
Line 48: Line 48:
  
 [[http://www.microsoft.com/en-us/download/confirmation.aspx?id=44266|Microsoft Visual C++ Compiler for Python 2.7]] [[http://www.microsoft.com/en-us/download/confirmation.aspx?id=44266|Microsoft Visual C++ Compiler for Python 2.7]]
 +
 +----
 +===== Cython Tutorial =====
 +
 +# Cython Tutorial 2015-1-1
 +
 +install
 +
 +Dockerfile
 +<code>
 +FROM debian:sid
 +MAINTAINER Donghee Park <dongheepark@gmail.com>
 +
 +RUN apt-get update
 +CMD echo "updated"
 +RUN apt-get install vim python openssh-server -y
 +CMD echo "vim and ssh package installed"
 +RUN echo "Asia/Seoul" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata
 +RUN echo 'root:docker' | chpasswd
 +RUN /etc/init.d/ssh start
 +RUN apt-get install build-essential python-pip python-dev -y
 +RUN pip install cython
 +
 +CMD ["/bin/bash"
 +
 +
 +</code>
 +
 +Makefile
 +
 +<code>
 +cython helloworld.pyx
 +gcc -g -O2 -fpic `python-config --cflags` -c helloworld.c -o helloworld.o  
 +gcc -shared -o helloworld.so helloworld.o `python-config --libs`
 +
 +</code>
 +
 +mycode.c
 +
 +<code>
 +#include <stdio.h>
 +
 +int myfunc(int a, int b)
 +{
 + printf("look we are within your c code!! \n");
 + return a+b;
 +}
 +</code>
 +
 +mycode.h
 +
 +<code>
 +#ifndef __MYCODE_H__
 +#define __MYCODE_H__
 +extern int myfunc (int, int);
 +#endif __MYCODE_H__
 +</code>
 +
 +mycodecpy.pyx
 +
 +<code>
 +cdef extern from "mycode.h"
 + cdef int myfunc (int, int)
 +
 +def callCfunc ():
 + print myfunc (1,2)
 +</code>
 +
 +<code>
 +cython mycodecpy.pyx
 +gcc -g -O2 -fpic -c mycode.c -o mycode.o
 +gcc -g -O2 -fpic -c mycodecpy.c -o mycodecpy `python-config --cflags`
 +gcc -shared -o mycodecpy.so mycode.o mycodecpy.o `python-config --libs` 
 +</code>
 +
 +----
 +===== xdress install =====
 +llvm 3.4.2 in macos x 10.9
 +
 +<code>
 +wget http://llvm.org/releases/3.4.2/clang+llvm-3.4.2-x86_64-apple-darwin10.9.xz
 +#wget http://llvm.org/releases/3.4.2/clang+llvm-3.4.2-x86_64-linux-gnu-ubuntu-14.04.xz
 +
 +tar xvfz clang+llvm-3.4.2-x86_64-apple-darwin10.9.xz
 +mv clang+llvm-3.4.2-x86_64-apple-darwin10.9 llvm-3.4.2-build
 +
 +export LLVM_CONFIG=llvm-3.4.2-build/bin/llvm-config
 +
 +git clone git://github.com/xdress/xdress.git
 +
 +cd xdress
 +
 +python setup.py build_ext --inplace
 +sudo python setup.py install
 +</code>
 +
 +
 +
 +<code>
 +xdress --debug -p clang
 +
 +</code>
 +----
 +===== xdress 사용하기 =====
 +
 +c++ class 'A' python으로 binding 하기
 +
 +
 +jehsrc/hoover.h
 +<code>
 +#if !defined(HOOVER)
 +#define HOOVER
 +namespace hoover {
 +class A {
 + public:
 +   float a;
 +   double power(int n=1);
 +};};
 +#endif
 +</code>
 +----
 +
 +jehsrc/hoover.cpp
 +
 +<code>
 +#include "hoover.h"
 +double hoover::A::power(int n){
 +  int i = 1;
 +  double val = a;
 +  while (i < n){val *= a; i++;};
 +    return val;
 +};
 +</code>
 +
 +
 +----
 +
 +jeh_xdressrc.py
 +
 +<code>
 +package = 'jedgar'      # top-level python package name
 +packagedir = 'jedgar'   # location of the python package
 +builddir = 'jehbuild'
 +
 +classes = [('A', 'jehsrc/hoover.*')]
 +</code>
 +
 +jeh_setup.py
 +<code>
 +import os
 +from distutils.core import setup
 +from distutils.extension import Extension
 +from Cython.Distutils import build_ext
 +
 +import numpy as np
 +
 +cwd = os.getcwd()
 +incdirs = [cwd, os.path.join(cwd, 'jehsrc'), np.get_include()]
 +
 +ext_modules = [
 +    Extension("jedgar.hoover", ['jehsrc/hoover.cpp', "jedgar/hoover.pyx", ],
 +    include_dirs=incdirs, language="c++")
 +    ]
 +
 +setup(  
 +  name = 'jedgar',
 +  cmdclass = {'build_ext': build_ext},
 +  ext_modules = ext_modules,
 +  packages = ['jedgar']
 +)
 +</code>
 +
 +Makefile
 +
 +<code>
 +all:
 +        xdress --rc jeh_xdressrc.py
 +        python jeh_setup.py build > /dev/null 2>&1
 +clean:
 +        rm -rf build
 +        rm -rf jehbuild
 +        
 +</code>
 +
 +----
 +Hoover Example
 +
 +<code>
 +from jedgar.hoover import A
 +
 +a = A()
 +a.a = 10
 +a.power(42)
 +</code>
python.1419757684.txt.gz · Last modified: 2018/07/18 14:09 (external edit)