MacPythonについてのページ(よ)>

HOWTO: MPWでPythonをC言語アプリケーションに組み込む


Last modified at 2004/12/2


この文書はDr. Corran Websterさんによる"HOWTO: Compiling Python Modules with MPW"(訳はHOWTO: MPWでPythonモジュールをコンパイルする)を真似て書いたものです。

Macintosh上で MPW を使って Python2.0 source に付属の Mac:Demo:embed:demo.c をコンパイルできたので、その方法を書きます。
おかしいところがあるかもしれません。お気づきの点がございましたら、わたしまでご連絡いただければ幸いです


Python Macintosh バージョンMetrowerks CodeWarrior でコンパイルされています。C拡張モジュールも CodeWarrior でコンパイルされており、ドキュメントとサンプルコードもCodeWarrior を念頭においた内容になっています。

もちろん、 Mac:Demo:embed:demo.c についても、embeddemo.prj という CodeWorrior 用のファイルしかありません。

でも、CodeWorrior は高価ですので私のような趣味のプログラマーは簡単に手が出せません。しかし、Macintosh には MPW があります。

Macintosh Programmer's Workshop (MPW) はApple社製の開発環境で、Developper CDあるいはAppleのFTPサイトから無料でダウンロード できます。

MPWのダウンロード、インストール方法については紹介マニアさんの情報にお世話になりました。

実行するにはMPWとPythonの source が必要です。MPWは Shell3.6d1、CreateMake4.7.1d1、MrC5.0d3c1、Python2.0 source を使いました。Python2.0 source は Jack's MacPython page からダウンロードできます。

PowerPC Macintosh の MacOS Classic(Carbon ではありません)アプリケーションを作るという内容になっています。他の環境/形式で試したことはありません。

コンパイルのためにMPWをセットアップする

このステップは、『HOWTO: MPWでPythonモジュールをコンパイルする』と同じです。必ずしも必要ではありませんが、開発を容易に、簡便にします。

たいていの MacPython ユーザ(特に CodeWorriorを持っていない人)は Python をバイナリで『Python 2.0』フォルダで持っているはずですから、『Python 2.0 source』フォルダ内の『Include』フォルダを『Python 2.0』フォルダ内にコピーします。また、『Python 2.0 source:Mac』フォルダ内の『Include』フォルダを『Python 2.0:Mac』フォルダ内にコピーします。

次に、MPWのStartup ItemsフォルダにPythonという新しいファイルを作り、次のように書き込みます:

set Python "Macintosh HD:Applications:Python 2.0:"
set PythonIncludes "{Python}Include"
set PythonMacIncludes "{Python}Mac:Include"
set PythonCore "{Python}PythonCore"

export Python PythonIncludes PythonMacIncludes PythonCore

Macintosh HD:Applications:Python 2.0:は、実際にあなたの Python が置かれているパスに置き換えて下さい。ここに示したのはPython 2.0 の場合の一般的な場所ですが、以前のバージョンの場合は違います(特に違っているのは、PythonCoreが機能拡張フォルダにあることです)。

次に、MPWのMrCコンパイラのためにconfig.hを書き換えます。この書き替えは MacPython1.5.2/2.0 で必要です。(MacPython2.2.xについては『HOWTO: MPWでPythonモジュールをコンパイルする』の訳注をご覧下さい。)このヘッダーファイルは標準のディストリビューションでは:Mac:Includeにあります。手入力で以下の行を、__MWERKS____SC__の似たような記述の後に加えます:

#ifdef __MRC__
#define BAD_STATIC_FORWARD
#endif

MPWのStartup itemのPythonconfig.hのコピーをここに置いておきますのでどうぞお使い下さい。

ソースファイル demo.c を書き換える

demo.c をエディタで開いて 42-44 行目を以下のように変更します。

上のように“¥n”を削除します。“¥n”のかわりに“¥r”にしてもいいようです。

リソースファイルを作る

リソースファイルを用意します。

ResEdit を起動してFile メニューから New...を選び、新規にリソース書類を作ります。demo.rsrc という名前にします。さらに PythonIntepreter を ResEdit で開いて、その中の 'SIZE' リソースを選択し、コマンドキー+Cでコピーします。demo.rsrc のウィンドウをクリックしてアクティブにし、コマンドキー+Vでペーストします。demo.rsrc を保存して、ResEdit を終了します。

'SIZE' リソースはとりあえず ID'-1' しか必要ではないので、ID'0'、'1' は削除して構いません。また、DeRezで demo.rsrcをテキストファイルにしておくと、CreateMakeコマンドでソースファイルとして加える時にテキストファイルとして表示されるので、便利かもしれません。

コンパイルする

MPWでコンパイルするには3つのアプローチがあります。コマンドラインインターフェイスを使う、MPWのCreateMakeコマンド(メニュー項目の"Create build commandノ")を使う、Makefileを手書きする、の3つです。

面倒なので、"Create build commandノ"しか私は使ったことがないので、"Create build commandノ"での方法を書きます。

CreateMakeを使う

ふつうはCのソースコードと同じディレクトリにmakefileを置きたいので、先に進む前にMPWのワーキングディレクトリをCのソースコードのあるディレクトリ(Python 2.0 source:Mac:Demo:embed)に設定します。MPW のDirectoryメニューから"Set Directory..."を選びますが、私の場合、フリーズしてしまうので、Worksheet に"setdirectory"と書いて、オプションキー+enter でウィンドウを表示させ、"New Defualt Directory..."ボタンを押してディレクトリを選択、"SetDirectory"ボタンを押して設定しています。

Directoryメニューから"Set Directory..."を選ぶとフリーズしてしまうのは、私がNavigationServiceを入れてるせいかもしれません。上のようにShellに打ち込むほかに、MPWShellと同じフォルダ内に『UserStartup・Jobs』みたいなファイルを作って、その中に
AddMenu Shortcuts 'Set Directory...' 'SetDirectory...'
を書いておくと、『Shortcuts』メニューに『SetDirectory...』ができて、このSetDirectoryが使えます。『...』は英字の『Optionキー+;』です。

ディレクトリが設定できたら、Makeファイルを作ります。

makefileができたら、編集する必要があります。カレントディレクトリの"demo.make"ファイルを開いて、以下の変更をします:

ファイルを保存します。これでビルドする準備ができました。

"Build"あるいは"Full Build"メニューを選び、demoとタイプすると、MPWがやってくれます。

demo を起動する

エラーがなくmake が終了すると、Worksheet に"demo"と表示されます。そのまま"enter"を押すと、アプリケーション demo が起動し、以下のようにコマンドライン引数を尋ねるウィンドウが表示されます。これは、
argc = ccommand(&argv);
の実行です。

コマンドライン

"OK"を押すと、以下のようにPythonのウィンドウが出て、終了します。

Pythonウィンドウ

demo.c の中にある
printf("Hello, brave new world\n\n");
などの stdio への出力結果は、demoと同じディレクトリに"stdout"というテキストファイルが作られ、そこに書き込まれています。

もちろん、demoアプリケーションは Finder画面からダブルクリックで起動できます。こうしてできたアプリケーションは Shared Library である PythonCore を必要とします。


参考:


MacPythonについてのページ(よ)へもどる
Last modified at 2004/12/2