概要
はじめての Python です。
社内向けにちょっとしたコマンドラインツールを作ったので、流れをまとめておきます。
だいたい良くある面倒なネタにはツールが用意されていて、さっと開発に入れる気がしました。
テンプレートから作成
Cookiecutter はテンプレートからプロジェクトを作成してくれるツールです。
$ sudo pip install cookiecutter
sudo が必要かどうかは、pythonのインストールパスによる模様です。
テンプレートは、pypackage というのを使いました。
$ cookiecutter https://github.com/audreyr/cookiecutter-pypackage
作者やパッケージの名前などいろいろ質問されるので、答えていきます。
質問に答え終わると「project_slug:」で入力した名前でプロジェクトディレクトリが作成されます。
大事なところはこんな感じでしょうか。
my_tool
├── docs # ドキュメント
├── my_tool # ソースコード
├── tests # テストコード
├─ README.rst # 他にもrstがたくさん
└─ setup.py # インストールスクリプト
ここでプロジェクトディレクトリに移動して、git init しておくのが良いでしょう。
実装
CLI
コマンドを作るときは、前記のテンプレート作成時に「Select command_line_interface:」で「1 Click」を選びます。
Click はコマンドライン・インターフェースを作成するためのパッケージです。
コマンドライン引数やオプションのパースはもちろん、グループ化とかサブコマンドとか、テストのお世話までしてくれます。
テンプレ作成時に CLIを選んでいれば、/my_tool/cli.py が出来ているので、コマンドラインの制御はここに実装します。
モジュール
/my_tool/my_tool.py をメインモジュールとして実装していきます。
もちろん役割ごとにファイル(モジュール)を分けた方が良いでしょう。
別モジュール(別ファイル)の関数を参照したいときは、import を書きます。
たとえば、my_tool.py で hoge.py に書いた関数を使いたいときは、こんな感じです。
def koge()
pass
import my_tool.hoge as hoge
def main()
hoge.koge()
外部パッケージの読み込み
依存するパッケージは setup.py に書いておきます。
requirements = ['Click>=6.0', 'pandas', ]
Pandas を追記した例です。
Click は作成時に書かれているので、その後ろに追加するだけです。
依存パッケージを開発環境に適用するには、setup.py を実行します。
$ python setup.py install
クラスとか
オライリー本を読んだ限りだと、Python はクラスを作るのには消極的な文化のようです。
組み込みのデータ型(リスト、タプル、辞書、集合などなど)がかなり便利なので、確かにあんまり必要ないかも。
テスト
前記のテンプレート作成時に「use_pytest:」で「y」を選べば、テストコードのテンプレートも出来ます。
Click を利用したCLIのテスト例がお役立ちです。
ドキュメント
rst(reStructuredText) という形式で書きます。
Sphinx でhtml化出来ます。
$ pip install sphinx
Anaconda で python を入れた場合は、Sphinxはすでに入っていたようでした。
デプロイ
pip でインストールできます。
リポジトリからインストールするならこんな感じ。
$ pip install git+https://git.repos/my_tool
git+ の後ろにリポジトリのパスを書きます。
このコマンドだと、masterブランチの最新がインストールされますが、ブランチなどなどいろいろ指定もできるようです。
パッケージを圧縮ファイルにまとめて持っていく方法もあります。
まず、ソースからパッケージファイルを作成します。
$ python setup.py sdist
実行すると、dist/ 配下に my_tool-X.X.X.tar.gz が作成されます。
my_tool-X.X.X.tar.gz をインストール先に配置し、pip コマンドでインストールします。
$ pip install my_tool-X.X.X.tar.gz
パッケージのバージョンを上げる
bumpversion というツールでバージョン番号の管理をします。
$ sudo pip install bumpversion
$ bumversion patch # major / minor / patch のどれかを指定する
実行すると以下をまとめてやってくれます。
- ソースコード内のバージョン番号を書き換える
- git commit する
- コミットにバージョンのタグを設定する