今度は、パッケージの作成方法
まず、パッケージとはモジュールの集合体。Pythonにおいて、以下のことが成立する
ディレクトリ構造 = パッケージ階層 ファイル名 = モジュール名
じゃぁパッケージ全体の設定はどうするんだ? __init_.py ファイルを設置する。(省略可)
#ディレクトリ構造 ./Amazon +- __init_.py +- AWS_Actount.py /products + __init__.py +-- /Book | +-- __init__.py +--/Video +-- __init__.py
などと__init__.pyが沢山出来ますよ。__init__.pyがあることでディレクトリがパッケージとして認知される。
パッケージ内の特定モジュールをLoadする。
これはJavaと同じ発想で良い。
//Java import java.io.*; import java.util.Hashtable; import java.util.Properties; #Python import Amazon.products import Video from Amazon
ここで、注釈: import X from のこと
//Javaだと import java.io.*; import java.util.Hashtable; import java.util.Properties;
java.utilを何度も書く。これが面倒だろ?
Pythonでは、Fromを使うことでSimpleにしている
javaを題材に例を作ると
#python import java.io.* from java.util import Hashtable, Properties # ^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ # 共通部分 タプル
このシンプルな記法がPythonの特徴さ。
パッケージの銘々規則
変数名や関数名と同じ。ファイル名は[名前.py]と書く。 正規表現で書くと
[a-Z][a-Z0-9_]* または [a-zA-Z][a-zA-Z_0-9]* または (\l\s)(\w)
windowsはcase insensitiveだぞ?
Windows は大文字小文字を区別しないので、[名前.py]では不便なことが出てきそうですね?Windows95系には、ファイル名の文字数制限がある。*1
安全のために、パッケージの初期ロード(__init__.py)に内包するモジュール名を定義しておく。__all__ 変数を使う。
# ./sample/__init__.py __all__ = ["hoge", "FOO", "Bar"]
と書いておけば
from sample import *;
と全指定したときに __all__の中身で指定した「大文字小文字」でパッケージが読み込まれる。ファイル名を無視するようだ。
*1:win98を現役で使ってる開発者なんていないだろうけど