User Tools

Site Tools


python

Differences

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

Link to this comparison view

Next revision
Previous revision
python [2014/12/28 08:38] – created dongheepython [2018/07/18 14:10] (current) – external edit 127.0.0.1
Line 1: Line 1:
-python bindng+====== Python C/C++ bindng ====== 
 +간단한 cad를 만들어 보는게 목표 
 + - glfw, glew을 binding 하여 써보자.  
 + - geode 분석 
 + - cygl 분석 https://github.com/pupil-labs/pyglui 
 + 
 +===== Cython helloworld =====
  
-====== Cython helloworld ====== 
 Reference: https://media.readthedocs.org/pdf/cython/latest/cython.pdf Reference: https://media.readthedocs.org/pdf/cython/latest/cython.pdf
  
-setup.py+setup.py # build script
 <code> <code>
 from distutils.core import setup from distutils.core import setup
Line 15: Line 20:
 </code> </code>
  
-hello.pyx+hello.pyx # cython script
 <code> <code>
 def say_hello_to(name): def say_hello_to(name):
Line 31: Line 36:
 </code> </code>
 를 해서 커맨드라인에서 hello.c를 생성할 수 있다.  를 해서 커맨드라인에서 hello.c를 생성할 수 있다. 
 +
 +----
 +질문
 + - pyx, pyd, pyi 의 역활 구분.
 +
 +
 +----
 +===== Cython Compiler =====
 +
 +win32에서 cythonize할때 사용하는 컴파일러는 mingw32와 ms의 visual c++이 있는데, ms에서 python용으로 vc를 준다.
 +
 +[[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.1419755905.txt.gz · Last modified: 2018/07/18 14:09 (external edit)