- ちょくちょく使うpythonモジュールをパッケージ化してpip installしておくとpythonモジュールの場所を意識せずに実行できるので便利。
- 下記の記事で作ったCSVをJSONに変換するモジュールをパッケージ化する。
- 既存のモジュールをパッケージ化する場合は
poetry init
することもできるが、今回はpoetry new
したところに作成したモジュールを配置する。 - poetry はpip installしておくこと
pip install poetry
poetry addでパッケージディレクトリ作成
引数には最終的なパッケージ名にしておくとよい。
% poetry new csv2json
Created package csv2json in csv2json
下記のような構成でディレクトリやファイルが作成される。
current_dir
|--csv2json
| |--README.rst
| |--csv2json
| | |--__init__.py
| |--pyproject.toml
| |--tests
| | |--__init__.py
| | |--test_csv2json.py
個々のファイルの説明は省略、公式ドキュメント参照
pythonモジュール配置
Users/k-aido/work/python/hoge
|--csv2json
| |--README.rst
| |--csv2json
| | |--__init__.py
| | |--csv2json.py # 追加
| |--pyproject.toml
| |--tests
| | |--__init__.py
| | |--test_csv2json.py
pyproject.toml更新
下記について更新を行う。
- 依存パッケージの追加
- 実行コマンドを定義
初期状態
[tool.poetry]
name = "csv2json"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
[tool.poetry.dependencies]
python = "^3.8"
[tool.poetry.dev-dependencies]
pytest = "^5.2"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
依存パッケージの追加
今回のモジュールは引数の制御にclickを使っているのでこれを追加する。
流れとしては下記。
-
poetry search
でパッケージ名を検索 -
poetry add
で追加
モジュール名がわかっていれば、pyproject.tomlを直接更新してもOK
% poetry search click
click8 (8.0.1)
Composable command line interface toolkit
click (8.0.3) # 今回使うのはこちら
Composable command line interface toolkit
click-repl (0.2.0)
REPL plugin for Click
click-uwescience (7.0.1)
A simple wrapper around optparse for powerful command line utilities.
click-aliases (1.0.1)
Enable aliases for Click
click-utils (0.2.1)
a set of utilites for writing command line programs with Click
click-shell (2.1)
An extension to click that easily turns your click app into a shell utility
click-restful (0.0.1)
Turn Click CLIs into Flask RESTful APIs.
click-lock (0.6)
Adds locks and timeouts to click entrypoints
click-configfile (0.2.3)
This package supports click commands that use configuration files.
click-frame (0.1)
docusign-click (1.0.0)
DocuSign Click API
click-easylog (0.1.0)
click-plus (0.0.3)
collection of click extensions
click-params (0.1.2)
A bunch of useful click parameter types
click-stream (0.0.10)
Click option type for http/https/file inputs
click-demo (0.2.0)
Click commands Implementation along with Test cases
sphinx-click (3.0.1)
Sphinx extension that automatically documents click applications
pytest-click (1.0.2)
Py.test plugin for Click
types-click (7.1.7)
Typing stubs for click
% poetry add click
Creating virtualenv csv2json-OWomnvc1-py3.8 in /Users/k-aido/Library/Caches/pypoetry/virtualenvs
Using version ^8.0.3 for click
Updating dependencies
Resolving dependencies... (0.9s)
Writing lock file
Package operations: 9 installs, 0 updates, 0 removals
• Installing pyparsing (2.4.7)
• Installing attrs (21.2.0)
• Installing more-itertools (8.10.0)
• Installing packaging (21.0)
• Installing pluggy (0.13.1)
• Installing py (1.10.0)
• Installing wcwidth (0.2.5)
• Installing click (8.0.3)
• Installing pytest (5.4.3)
実施後
[tool.poetry]
name = "csv2json"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
[tool.poetry.dependencies]
python = "^3.8"
click = "^8.0.3" # 追加された
[tool.poetry.dev-dependencies]
pytest = "^5.2"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
これでこのパッケージをインストールした際に、一緒にclickがインストールされる。
実行コマンドを定義
コマンド名 = 'tomlから見た.pyファイル:関数名'
[tool.poetry.scripts]
csv2json = 'csv2json.csv2json:main'
ビルド
-
poetry build
コマンドでビルドする。 -
-f
を指定すると、tar.gz形式か、whl形式かを選べる。使い分けについてはわからず。別途調べる。
% poetry build
Building csv2json (0.1.0)
- Building sdist
- Built csv2json-0.1.0.tar.gz
- Building wheel
- Built csv2json-0.1.0-py3-none-any.whl
インストールしてみる
ビルドで作成したファイルを指定してpip installすることが可能。
% pip uninstall csv2json
Found existing installation: csv2json 0.1.0
Uninstalling csv2json-0.1.0:
Would remove:
/Users/k-aido/Library/Python/3.8/bin/csv2json
/Users/k-aido/Library/Python/3.8/lib/python/site-packages/csv2json-0.1.0.dist-info/*
/Users/k-aido/Library/Python/3.8/lib/python/site-packages/csv2json/*
Proceed (Y/n)? Y
Successfully uninstalled csv2json-0.1.0
k-aido@k-aidonoMacBook-Air csv2json % pip install ./dist/csv2json-0.1.0-py3-none-any.whl
Defaulting to user installation because normal site-packages is not writeable
Processing ./dist/csv2json-0.1.0-py3-none-any.whl
Requirement already satisfied: click<9.0.0,>=8.0.3 in /Users/k-aido/Library/Python/3.8/lib/python/site-packages (from csv2json==0.1.0) (8.0.3)
Installing collected packages: csv2json
Successfully installed csv2json-0.1.0
インストールされた。
% pip list | grep csv2json
csv2json 0.1.0
こんな感じで使える。
% csv2json sample.csv -o output.json