ダジャレAIをpip install したい!!!
このBPアドベントカレンダーでダジャレAI(というか布団ふっとばし装置)を作成して早3年立ちました。
https://qiita.com/fujit33/items/dbfbd7a2aa3858067b6c
あれから業務でPythonを書き続けていますが、あのとき作成したダジャレ判定AI(Shareka)とダジャレ評価AI(Ukeruka)を使ったことはありません。
なぜなら、pipでinstallできないからです
今回はダジャレかどうかを判定するSharekaをPyPIに登録し、だれでも気軽にダジャレ判定できるようにしたいと思います。
※今年は時間がなくて謎AIプロダクトは作れませんでした、、、期待していた方はクソアプリアドベントカレンダーで投稿したこちらで我慢してください。
手順
準備
Poetryインストール
今回はPyPIに登録するためのツールは色々ありますが、色々調べた結果(参考にいっぱい記載)poetryを使うのが最も手軽にできそうなので、こちらを選びました。
Poetryはパッケージの依存関係管理だけでなく、パッケージのビルドや公開までやってくれる優れものです。
poetryを使ったPyPIへの登録記事はこちらが一番参考になりました。
https://kk6.hateblo.jp/entry/2018/12/20/124151#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
雛形の作成
下記コマンドで作成するパッケージ名を指定することで、最小構成のファイルを構成してくれます。
パッケージ名は dajapy (読み:だじゃぱい)です!
poetry new dajapy
作成される雛形
.
├── README.rst
├── dajapy
│ └── __init__.py
├── pyproject.toml
└── tests
├── __init__.py
└── test_dajapy.py
必要なパッケージをインストール
poetry環境でパッケージをインストールする際はpoetry addを使います。依存関係の解決や、管理ファイルの更新まで自動で行ってくれます。
poetry add sudachipy
poetry add sudachidict_core
パッケージの実装
今回は最小構成のパッケージとして、ダジャレを入力するとダジャレかどうかを判定してくれる関数を持つパッケージを作成します。
詳しい実装は下記を参照ください。弊社エンジニアの@woody-kawagoeがリファクタしてくれたコードです。
https://github.com/fujitako03/dajapy
構成だけ説明
dajapy配下のshareka.pyでダジャレかどうかを判定するSharekaクラスを実装し、__init__.pyでダジャレかどうかを判定するis_dajare関数をimportしています。
├── README.rst
├── dajapy
│ └── __init__.py
│ └── shareka.py
├── pyproject.toml
└── tests
テスト
雛形で作られたtests/test_dajapy.pyに、テストコードを記載していきます。
from dajapy import __version__, is_dajare
def test_version():
assert __version__ == '0.1.1'
def test_is_dajare_true():
"""
正常テスト(ダジャレ判定)
"""
sentence = "アルミ缶の上にあるみかん"
kaburi_count=5
dajare_flg = is_dajare(
sentence=sentence,
kaburi_count=kaburi_count)
assert dajare_flg == True
テストは以下のコマンドで実行可能です
poetry run pytest test
パッケージ説明の追記
pyproject.tomlにパッケージに関する情報を追記していきます。
https://python-poetry.org/docs/pyproject/
[tool.poetry]
name = "dajapy"
version = "0.1.1"
license = "MIT"
description = "日本語のダジャレを判定するPythonパッケージ"
authors = ["fujitako03 <okome.osakana.oniku@gmail.com>"]
homepage = "https://github.com/fujitako03"
repository = "https://github.com/fujitako03/dajapy"
documentation = "https://github.com/fujitako03/dajapy"
readme = "README.md"
PyPIに公開
いよいよPyPIに登録していきます。
PyPIアカウントの作成
下記登録フォームからアカウントを作ります。メールアドレス認証を済ませればOKです。PyPIには本番用とテスト用があります。試して見るだけならテスト用を使うようにしましょう。
- 本番用:https://pypi.python.org/pypi?%3Aaction=register_form
- テスト用:https://testpypi.python.org/pypi?%3Aaction=register_form
リポジトリの設定
連携するリポジトリを設定します
# 本番用
poetry config repositories.pypi https://pypi.org/legacy/
# テスト用
poetry config repositories.testpypi https://test.pypi.org/legacy
ユーザ名とパスワードを登録
PyPIに登録したユーザ名とパスワードを入力します
# 本番用
poetry config http-basic.pypi [username] [password]
# テスト用
poetry config http-basic.testpypi [username] [password]
API TOKENを登録
PyPIのサイト内でAPI TOKENを作成できますので、こちらも登録します
# 本番用
poetry config pypi-token.pypi [api token]
# テスト用
poetry config pypi-token.testpypi [api token]
パッケージをビルドする
下記コマンドでビルドし、自動で必要なファイルを作成してくれます。とても便利。
$ poetry build
Building dajapy (0.1.0)
- Building sdist
- Built dajapy-0.1.0.tar.gz
- Building wheel
- Built dajapy-0.1.0-py3-none-any.whl
パッケージを公開
下記コマンドで公開します。とてもかんたん。
# 本番
poetry publish
# テスト
poetry publish -r testpypi
pypiのサイトを開いてみると、ちゃんと登録されている!
https://pypi.org/project/dajapy/
公開したパッケージをインストールしてみる
さあ、念願のpip installです。。。。
$ pip install dajapy
ERROR: Could not find a version that satisfies the requirement dajapy (from versions: none)
ERROR: No matching distribution found for dajapy
あれ、できない。
こちらの記事によると時間がかかることがあるというのですが、今のところできていません。どなたか解決策をご存知でしたら教えて下さい。
https://pypi.org/project/dajapy/
まとめと今後
ということで、成功する前に時間切れが来てしまいました。
解決できたら記事を更新したいと思います。
下記の参考リンクにもありますが、本当はGithub Actionsを使った自動テスト、自動デプロイ/リリースもやりたかったのですが、こちらも時間がありませんでした。というか本当は時間があればいつもどおり変なやつを作ろうと思っていましたが、今回は時間がなく諦めました。
みなさん、良いお年を!
参考