Python 学習:Python to/from C

2014-05-17 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での、blogramのランクインカテゴリは、
2、3、2、1、0、 0、0、1、0、0(39)で、換算ポイント 61pt 。
「Firefox」日替わりで、今朝方4位にダウン。
・-・ - -・

さて、本文。

WinPython:32ビット版に乗り換え」たので、
今週初め(2014-05-12)の記事:
Python 学習:インタプリタの拡張?
で書いた、
ctypes」モジュール
や、
5. 他のアプリケーションへの Python の埋め込み
も含めて、
これまでの学習結果をまとめ。


[1] C から Python

(1) system 関数(C 標準)
  完結した Python プログラムを呼び出すのであれば、
  「System」関数を使えば良い。
  呼び出し側は、
  C に限らず、「Perl」でも何でも、それこそ「Python」でも良い。

(2) Python.h ヘッダ(Python 標準)
  Python の一部(の関数)を呼び出すには、
  前回記事の如く、
  「#include <Python.h>」を使い、
  処理部で、Python のソース・コードを記述する。
  つまり、C ソースの中に、Python ソースを埋め込んで、
  Python 環境で、C コンパイル・リンクする。


[2] Python から C

(3) subprocess モジュール(Python 標準)
  完結した C プログラムを呼び出すのであれば、
  2ヶ月前(2014-03-10)の記事:
  「Python 学習:system関数?
  の如く、「subprocess.ほにゃらら」を使えば良い。
  呼び出すものは、
  C に限らず、「Perl」でも何でも、それこそ「Python」でも良い。
  つまり、相手は、(Windows なので) 「.exe」ファイル。

(4) ctypes モジュール(Python 標準)
  C で作った「.dll」の(中にある)関数を呼び出すには、
  前回記事の如く、
  「ctypes」モジュールを使う。
  上記(3)と違って、完結した C プログラムでは無くて、関数の集まり。
  Python と、C の両方のコーディングが必要。

(5) Cython パッケージ(WinPython には入っている)
  「Cython: C-Extensions for Python
   Cython is an optimising static compiler
    for both the Python programming language
    and the extended Cython programming language
  大雑把に云うと、Python モジュールを C コンパイルして使う。
  「Kesin's diary」の
  「Pythonを高速化するCythonを使ってみた
  がサンプル。
  日本語版ドキュメントは、
  「Cython ドキュメント(和訳)
  ※蛇足:これは「Cython」であって、所謂「CPython」とは違う。

  使い方(手順):
  1.高速化したい部分のPythonソースを、~.pyx 拡張子で作る。
  2.それに対応した、setup.py コンパイル指示書を作る。
  3.DOSプロンプトで、「.pyx」から「.pyd」を作る:
    「python setup.py ・・・」
  4.この「.pyd」を利用する(メインの)Pythonソースを作る。
    「.pyd」とは、ほぼ(Windwos の)「.dll」ですね。

  setup.py の例:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

setup( cmdclass = {'build_ext': build_ext},
ext_modules = [Extension("hoge", ["hoge.pyx"])]
)



(6) Nuitka パッケージ
  「NuitkaでPythonを高速化する
   Nuitka is the Python compiler.・・・
   By 「Nuitka User Manual
  面白そう?
  WinPython には入っていない!

(7) Scipy の Weave モジュール(WinPython には入っている)
  「Technical Discovery」の、
  「Speeding up Python (NumPy, Cython, and Weave)
  で知った「Weave」で検索したところ、
  「Stack Overflow」の「performance」に、
  「Calling Python functions from inline C with scipy.weave
  があった。
  質問は、
   Can I call a python function from inline C code (using weave)?
    (織りを使用して) インライン C コードから
     python 関数を呼び出すことができますか?
  なんのこっちゃ???

  でも、「C/C++ inlining in Python」
  (scipy.weave.inline fails on Windows with MinGW)
  が気になるが、
  「Stack Overflow」の回答では、
  以下で、出来るとか???

from scipy.weave import inline

def foo(x):
return x*2

def bar():
a = 0
for i in xrange(10):
a += foo(i)
return a

def bar_weave():
code = '''
int a = 0;
for (int i=0;i<10;++i){
py::tuple arg(1);
arg[0] = i;
a += (int) foo.call(arg);
}
return_val = a;
'''
return inline(code,['foo'])

print bar()
print bar_weave()



(8) SWIG
  「SWIGの使い方 : ~Lucky No.9~
   =========================================
   今回SWIGについての説明をします。
   SWIGとは
    SWIG (Simplified Wrapper and Interface Generator) は、
     C/C++ で書かれたプログラムやライブラリを、
     Tcl/Tk、Perl、Python、Ruby、PHP、Lua などのスクリプト言語や、
     Java、C#、Scheme、Ocaml などの言語に接続するための
     オープンソースのツールである。(wikipediaより)
   てな感じで、C/C++のコードを他の言語でも使用できるというすぐれもの。
   Perl/Python版DxLibもこれで実装しています。
   今回はWindowsでPerl/Python/Java/C#で使用する方法を
   例にとって説明していきます。
   ・・・・・
   ・・・・・

  Python とは別のツール!


(9) CFFI
  「PythonのC言語拡張モジュール作成ガイド
  に、上記以外に、「CFFI」があった。
    まず、ある言語から別の言語で作成されたライブラリを
   呼び出す仕組みとして FFI(Foreign Function Interface)があります。
    CFFIはFFIの仕組みを利用して、PythonからCで作成された
   ライブラリを呼び出す仕組みです。
   ・・・・・
   ・・・・・
  ほぼ、「ctypes」の様なもの???

  「CFFI 0.8.2 documentation」に、
  「CFFI documentation」がある。

  しかし、これは WinPython には入っていない!


本日はここまで。


Python 学習は続く、・・・



見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


-,0316,-,0430,0311,0226,0306,0307,0506
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク