Windows」カテゴリーアーカイブ

IronPython で .net を触る。

直前に書いた IronPython を C# から使ってみる。 の逆版。

使い方としてはまず、

import clr

とした後、

clr.AddReference

を利用して、 .net のライブラリへの参照を追加していきます。


例:

import clr
clr.AddReference("System")
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import *
form = Form()
form.Show()

image


追記事項として、先ほどの記事にも書きましたが、

Public なクラスしか読み込んでくれないので、 Protected や Private などが含まれるものは使えません。

生成したクラスのインスタンスの内部で、呼び出して使用するという場合でも、どうやら失敗してしまうようです・・。謎。

 

であであー。

IronPython を C# から使ってみる。

みむらです。

Python でさくさくっとコードを書いて実験するという人はいると思うのですが、
それを .net で応用してみようという感じの内容です。

今回は執筆時のバージョン IronPython 2.7.1 を用いて紹介します。

(本家 Python の Version 2.7.1 と多少の点は異なりますが、かなりの部分で互換性があります。)

 

1.環境準備

C# の開発環境として、今回は Visual Studio 2010 を使用します。

http://www.microsoft.com/japan/msdn/vstudio/express/
ない方は、こちらから express 版を入れておくと良いかと思います。

 

加えて、今回のメインである、IronPython を、
http://www.ironpython.net/
ここから、ダウンロードしてインストールします。

 

2.プロジェクト作成

Visual Studio を立ち上げて、プロジェクトを作成します。

image

image

Visual C# の 「コンソールアプリケーション」を作成。

 

3.参照に IronPython を追加する。

image

ソリューションエクスプローラの参照設定を右クリック –> 参照の追加

image

インストールディレクトリに移動して、

C:\Program Files\IronPython 2.7.1
or
C:\Program Files (x86)\IronPython 2.7.1

あたりにファイルがいると思います。

IronPython.dll と Microsoft.Scripting.dll を追加。

 

4.コードを書く

コードの先頭に

using IronPython.Hosting;
using Microsoft.Scripting.Hosting;

を追記。

最小のコードとしてはこんな所でしょうか:

using IronPython.Hosting;
using Microsoft.Scripting.Hosting;

class Program
{
    static void Main(string[] args)
    {
        ScriptEngine engine = Python.CreateEngine();
        ScriptSource src = engine.CreateScriptSourceFromString("print \"Hello Python World\"");
        src.Execute();
    }
}

5.実行

image

 

ということで、ばっちり Python コードが C# 上から実行可能です。


応用例をいくつか。

ScriptScope を定義することによって、C# 上のクラスや、他のオブジェクトを触ることも可能となります。

using System;
using IronPython.Hosting;
using Microsoft.Scripting.Hosting;

public class hoge
{
    public void call()
    {
        System.Console.WriteLine("Hello C# World");
    }
}

class Program
{
    static void Main(string[] args)
    {
        ScriptEngine engine = Python.CreateEngine();
        ScriptScope scope = engine.CreateScope();
        scope.SetVariable("hoge", new hoge());

        ScriptSource src = engine.CreateScriptSourceFromString(@"

print ""Hello Python World""
hoge.call()"
        
            );
        src.Execute(scope);
    }
}

実行結果:

image

 

上記のように、

CreateScope() メソッドで作成したスコープに対して、

SetVariable() メソッドを利用し、第1引数に名前、第2引数に実体を指定することにより、

Python 上から利用可能となります。

 

ただ一つ注意点としては、

クラスが public でないと正常に動作しないという点があります。

 

これは、個人的には Python のクラスが全て public なのが起因しているのかと予想しておりますが、

詳細はよく分かっていません。


別の例:

image

using System;
using IronPython.Hosting;
using Microsoft.Scripting.Hosting;

class Program
{
    static void Main(string[] args)
    {
        ScriptEngine engine = Python.CreateEngine();

        ScriptSource src = engine.CreateScriptSourceFromString("1+2+3");
        System.Console.WriteLine("RET : " + src.Execute());
    }
}

Execute メソッドの戻り値はそのまま実行結果になっていますので、

このように結果を C# 側に返すということも可能です。

 

また、

image

このように、GetVariable メソッドを利用して値を取得することも可能です。


 

IronPython の利用例としては、

プログラム上のマクロ機能の提供が一番大きいのではと考えております。

その他には、Python でライブラリが提供されている物に対して、IronPython を通して C# から利用するというパターン。

 

今回の IronPython と同様のコールの仕方を用いることで、

http://ironruby.net/

こちらの IronRuby を利用することも可能です。

執筆時点では Version 1.1.3 ですが、これは本家の Ruby の Version 1.9.2 と互換性があると明記されています。

 

.net では同じ .net 上で動作する言語同士を協調動作させることができますので、

こういうのもアイデアによっては非常に良い物になるのではないでしょうか。

 

最後に。私が某所でやってきた時のプレゼン資料を最後に貼り付けておきます。

はろーふらすこ、はろーしなとら。

どうもみむらです。

ウェブ系のフレームワークは実は難しいんでしょ! と疑っていたのですが、
実際使ってみたら拍子抜けするレベルに簡単だったのでそのメモ。

意気込みを返せ-! っていう感じではありますが、
それだけ入りやすくて、本当に作りたい部分に集中出来るってことで良いんだと思います。

1.Ruby + Sinatra で Hello World

gem で sinatra を入れる。

下記のコード書く。

require 'sinatra'

get '/' do
   'Hello world!'
end

 

2.Python + Flask で Hello World

easy_install で Flask を入れる。

下記のコード書く。

from flask import Flask
app = Flask(__name__)

@app.route('/')
def func():
    return "Hello world!"

if __name__ == '__main__':
    app.run()

 

ということで、ひょえー。です。

Windows で へろく ってみる。

image

こんなこと言われましたが僕はめげません。
どうもみむらです。

Heroku  Cloud Application Platform

Heroku がなかなかおもしろい環境の予感がしたので、早速導入。

 

0. Heroku のアカウントを作る。

https://api.heroku.com/signup
Heroku Signup

ここから heroku のアカウントを作る。

 

1.Ruby 環境導入

RubyForge Ruby Installer for Windows ファイルリスト

ここから最新版の rubyinstaller を落としてきてインストール。

image

image

 

2. git インストール

Git – Fast Version Control System

Windows ロゴクリックして、最新版をとってきてインストール。

 

3.heroku 準備

Heroku  Dev Center  Getting Started with Heroku
ここを参照しながら。

3.1 heroku に必要なものをどっちゃりいれる。

image

gem install heroku rack bundler sinatra shotgun

3.2.SSH Key 作る。

image

Git Bash を立ち上げる。

image

$ ssh-keygen -t rsa -C "[e-mail アドレス]"
Generating public/private rsa key pair.
Enter file in which to save the key ( [環境によってここは変わる]  ): [何も打たずに Enter]
Created directory '...'
Enter passphrase (empty for no passphrase) : [パスワードを入れて Enter]
Enter same passphrase again: [同じパスワードをいれて Enter]

image

終わったらウィンドウを閉じる。

 

3.3. git 準備

image

git init
git add .
git commit -m "[コミットメッセージ (任意の文字列) ]"

image

heroku create

Enter your Heroku credentials.
Email : [heroku のログインに使用するメールアドレス]
Password : [heroku のログインに使用するパスワード]

4.おつかれさまでした


って、これだけで適当に完了。

一応サンプルコードを書いてみたり。

HerokuでSinatraを使ってHello worldする – アインシュタインの電話番号☎

ということで、ここを参考にしてみる。

とりあえず、私の環境だと動いたのでこんなところで。

Windows 7 のタスクバーでもう一つ立ち上げる。

メモ代わりに。

image

こんな感じでタスクバーがありますが、たとえば IE をもう一つ起動したいとき。
このままアイコンをクリックしても今開いているウィンドウがアクティブになるだけです。

そんなときに、

Shift + クリック
or
マウスの中クリック

をすると、

image

もう一つ立ち上がりました。ひとまずメモまで。