Python 学習:インタプリタの拡張?

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

さて、本文。

Python 2.7ja1 ドキュメント
を見ていたら、
Python インタプリタの拡張と埋め込み
が気になった。

曰く、
  このドキュメントでは、Python インタプリタを拡張するために
  C/C++ でモジュールを書く方法について述べます。
  拡張モジュールでは、新たな関数を定義できるだけでなく、
  新たなオブジェクト型とそのメソッドも定義できます。
  このドキュメントではまた、
  Python インタプリタを別のアプリケーションに埋め込み (embedding)、
  拡張言語として使う方法についても述べます。
  また、動的に(実行時に)拡張モジュールをロードする機能を
  OSがサポートしている場合に、
  動的ロード可能な拡張モジュールをコンパイルしてリンクする方法を示します。

  このドキュメントでは、読者は Python について基礎的な知識を
  持ち合わせているものと仮定しています。
  形式ばらない Python 言語の入門には、
  Python チュートリアル を読んでください。
  Python 言語リファレンス を読めば、
  Python 言語についてより形式的な定義を得られます。
  また、Python 標準ライブラリ では、
  Python に広い適用範囲をもたらしている既存のオブジェクト型、
  関数、および (組み込み、および Python で書かれたものの両方の)
  モジュールについて解説しています。

  Python/C API 全体の詳しい説明は、別のドキュメントである、
  Python/C API リファレンスマニュアル を参照してください。

  ・・・・・

と云うことで、
最初に、
  「1. C や C++ による Python の拡張
がある。
そこでは、
  C プログラムの書き方を知っているなら、
  Python に新たな組み込みモジュールを追加するのはきわめて簡単です。
  この新たなモジュール、拡張モジュール (extention module) を使うと、
  Python が直接行えない二つのこと:
  新しい組み込みオブジェクトの実装、
  そして全ての C ライブラリ関数とシステムコールに対する呼び出し、
  ができるようになります。
  ・・・・・
  ・・・・・
  もし C ライブラリ関数やシステムコールを呼び出す
  ような使い方を考えているなら、C のコードをいちいち書く前に
  ctypes モジュールの使用を検討してください。
  ctypes モジュールを使うと C のコードを扱う
  Python のコードが書けるようになるだけでなく、
  拡張モジュールを書きコンパイルして CPython に縛られてしまうよりも
  Python の実装間での互換性を高めることができます。
  ・・・・・
  ・・・・・
とある。

なになに、
一つ、C言語でモジュールを作り、Python から呼び出す?
その前に、もっと楽に出来る方法もある。
ctypes」モジュールを使う?

  15.18. ctypes - Pythonのための外部関数ライブラリ

   バージョン 2.5 で追加.

  ctypes は Python のための外部関数ライブラリです。
  このライブラリは C と互換性のあるデータ型を提供し、
  動的リンク/共有ライブラリ内の関数呼び出しを可能にします。
  動的リンク/共有ライブラリを純粋な Python で
  ラップするために使うことができます。
  ・・・・・
  ・・・・・

この「ctypes」は、WinPython に初めから入っている。
つかえるかも???


ここで、元に戻って、
5. 他のアプリケーションへの Python の埋め込み
  前章では、 Python を拡張する方法、すなわち C 関数のライブラリを
  Python に結びつけて機能を拡張する方法について述べました。
  同じようなことを別の方法でも実行できます:
  それは、自分の C/C++ アプリケーションに
  Python を埋め込んで機能を強化する、というものです。
  埋め込みを行うことで、アプリケーションの何らかの機能を
  C や C++ の代わりに Python で実装できるようになります。
  埋め込みは多くの用途で利用できます;
  ユーザが Python でスクリプトを書き、アプリケーションを
  自分好みに仕立てられるようにする、
  というのがその一例です。
  プログラマが、特定の機能を Python でより楽に書ける場合に
  自分自身のために埋め込みを行うこともできます。

これは、どうなのかナ???

でも一寸試してみよう。

最初にある、
  5.1. 高水準の埋め込み

#include <Python.h>

int main( int argc, char *argv[] ){
Py_Initialize();
PyRun_SimpleString( "from time import time,ctime\n"
"print 'Today is',ctime(time())\n" );
Py_Finalize();
return 0;
}


そのまま(?)に、「.c」ソースを作り、
常用の「Relo2」で、・・・
コンパイルは出来た。
しかし、リンク時に“未定義エラー”???

そうだ、「Relo2」は32ビット限定だった。
なので、64ビットでは、
Code::Blocks」で、
「MinGW-w64」を使うのだった。

で「Relo2」で行くなら、32ビット版Pythonでは?
「Portable Python」を引っ張り出してきて、
Python2.7 の「~.a」ファイルを追加指定。
一応、リンクまで終わった。
実行してみたが、「site」モジュールが無い???
“DOS”プロンプトで、“Path”を指定したら、
なんと、“Cランタイム不正使用”だとか???

使えないですね???


-----
直接の関係は、あるのかないのか?

後日、見つけた「Stack Overflow」の
Cython won't compile on Windows 7 x64
に、
  ・・・・・
  if you want to stick with x64,
  you can't use MingW
  and you have to use MS SDK C++ compiler
  ・・・・・
  ・・・・・
  Do not use MinGW-w64.
  ・・・・・
  ・・・・・
とかの記述がある???

64ビット版 Python では、
MinGW ( MinGW-w64 ) はダメ???
-----


本日はここまで。

更に Python 学習は続く。



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


140223
関連記事
スポンサーサイト

コメントの投稿

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

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



おきてがみ

最新記事
カレンダー
05 | 2017/06 | 07
- - - - 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 -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

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

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


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

Google Analytics
ブックマーク