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 ではありません)アプリケーションを作るという内容になっています。他の環境/形式で試したことはありません。
このステップは、『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のPython
とconfig.h
のコピーをここに置いておきますのでどうぞお使い下さい。
demo.c をエディタで開いて 42-44 行目を以下のように変更します。
PyRun_SimpleString("import sys\n"); PyRun_SimpleString("print sys.builtin_module_names\n"); PyRun_SimpleString("print sys.argv\n");
PyRun_SimpleString("import sys"); PyRun_SimpleString("print sys.builtin_module_names"); PyRun_SimpleString("print sys.argv");
上のように“¥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ノ"での方法を書きます。
ふつうは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"ファイルを開いて、以下の変更をします:
Includes =
変更後
Includes = -i "{PythonIncludes}" -i "{PythonMacIncludes}"
もし、ヘッダーファイルを加えるなら、同じようにここでインクルードする必要があります。
PPCCOptions = {Includes} {Sym•PPC}
変更後
PPCCOptions = -w off -d HAVE_CONFIG_H {Includes} {Sym•PPC}
{Sym-PPC} ∂
以下を加えます。
-d ∂ "{PythonCore}" ∂
他のshared libraryにリンクする必要があるなら、PythonCoreの前の行に追記し、その各行をそれぞれ∂
で終えます。(∂
は『オプションキー+d』で入力します)
ファイルを保存します。これでビルドする準備ができました。
"Build"あるいは"Full Build"メニューを選び、demoとタイプすると、MPWがやってくれます。
エラーがなくmake が終了すると、Worksheet に"demo"と表示されます。そのまま"enter"を押すと、アプリケーション demo が起動し、以下のようにコマンドライン引数を尋ねるウィンドウが表示されます。これは、
argc = ccommand(&argv);
の実行です。
"OK"を押すと、以下のようにPythonのウィンドウが出て、終了します。
demo.c の中にある
printf("Hello, brave new world\n\n");
などの stdio への出力結果は、demoと同じディレクトリに"stdout"というテキストファイルが作られ、そこに書き込まれています。
もちろん、demoアプリケーションは Finder画面からダブルクリックで起動できます。こうしてできたアプリケーションは Shared Library である PythonCore を必要とします。
参考: