13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Python パッケージの作り方メモ

Posted at

概要

はじめての 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 に書いた関数を使いたいときは、こんな感じです。

hoge.py
def koge()
  pass
my_tool.py
import my_tool.hoge as hoge

def main()
  hoge.koge()

外部パッケージの読み込み

依存するパッケージは setup.py に書いておきます。

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 する
  • コミットにバージョンのタグを設定する
13
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?