前回は、複数のモジュールを一つのディレクトリにまとめて、パッケージっぽいものを作りました。
今回は、モジュールのインポート部分を以下のように書けるようにしたいと思います。
(前回)
from solima.rectangle import Rectangle from solima.square import Square
(今回)
from solima import Rectangle from solima import Square
それでは、やってみます。
solimaというディレクトリをモジュールとして扱うには、このディレクトリ直下に__init__.pyというファイルを置きます。
さらに、RectangleとSquare、二つのクラスを使えるようにするために、以下のような内容を記述します。
solima/__init__.py
import sys, os sys.path.append(os.path.dirname(__file__)) from rectangle import Rectangle from square import Square
では、solimaパッケージを使うサンプルスクリプトを書いてみましょう。
main.py
from solima import Rectangle from solima import Square r = Rectangle(5, 4) print('面積:' + str(r.area())) s = Square(10) print('面積:' + str(s.area()))
この時点でのディレクトリ構成は以下の通り。
src ├── main.py └── solima ├── __init__.py ├── rectangle.py └── square.py
実行結果。
$ python main.py 面積:20 面積:100
上手いこといきました。 🙂
自分で使うプログラムを作るだけなら、これだけの知識でもなんとかなると思います。
しかし、不特定多数に配布するプログラムを作るとなると、誰かが作成したパッケージが必要なときに、それをインストールしなければなりません。
その作業をユーザーが、いちいちやらなければならないとなると、大変なことになります。
Q「あんたのプログラムを動かしたんだけど、なんとかっていうパッケージがないって言われたよ」
A「あ、それは、○○○というパッケージを△△△コマンドを使ってインストールしてください」
Pythonプログラマーに対してなら、これでも通用するかもしれませんが、Pythonのインストールだけで、ひいこら言ってる一般ユーザーには、あまりにも辛すぎる。
そこで、インストールコマンドを使わせるにしても、コマンド一発で全てをインストールできる仕組みが必要です。
そのための技術が、Eggであったり、Buildoutであったりするわけなんですが、本を読んでもネット情報を調べても、情報が錯綜していて「これでOK!」というのが見つかりません。
そんなわけで、それを調べるために、ここから苦難の道のりが始まります。 (-_-;)