- Framework化されたPythonでなければいけないような状況が滅多にない
- Python.Frameworkが必要な状況がもしあるなら、OS標準のFrameworkを使用するか、必要とするアプリケーションにFrameworkを同梱しておくべき
- PythonをFramework化すると面倒に巻き込まれることがある
1. Framework化されたPythonでなければいけないような状況が滅多にない
Mac OS XにはFramework化されたPythonがプリインストールされていますが、Framework化されたPythonが必要になるような状況は滅多にありません。というのはMac OS XのFramework(以下、Framework)が、Mac OS X固有の仕組みでしかないからです。
Mac OS Xにあまりなじみが無い人向けに、そもそもFrameworkとは何なのか?をかなり大雑把に説明すると、
共有ライブラリとそれに付随するリソースやメタ情報のファイルを階層化されたディレクトリ構造で1つにまとめたものということになります。この「階層化されたディレクトリ構造」はバンドル(Bundle)と呼ばれ、FrameworkのバンドルであるFramework Bundleの他にも、Application Bundle、Plug-In Bundle等、さまざまなバンドルがあります。
Application BundleやPlug-In Bundleはパッケージという属性を持ったバンドルなので、Mac OS XのFinderからは単一のファイルにしか見えませんが、Terminal.app等で直接見るか、Finder上で「パッケージの内容を表示」というコマンドを使う事で中のディレクトリ構造を見る事ができます。Mac OS XにはFinderからは単一のファイルとして扱えるが、実際にはディレクトリになっているものが色々あるのですが、それらのほとんどはパッケージの属性を持ったバンドルと考えて差し支えありません。
次に、Framework Bundleの例として、システム標準のPythonのFrameworkであるPython.Frameworkが /System/Library/Frameworks にありますので、これをFinderで開いてみましょう。Framework Bundleはパッケージではないので「パッケージの内容を表示」コマンドを使わなくても、普通に中身を見る事ができます。
上から3番目のPythonが共有ライブラリですが、これは単なるエイリアスに過ぎず、その実体は下から3番目の Versions/2.6/Python になっています。
何故このような事になっているのか?というと、Framework BundleがVersioned Bundleという仕組みを使っているからですが、その説明は後回しにします。
(続く)
0 件のコメント:
コメントを投稿