poetryは、パッケージマネージメントや、パッケージ作成を簡単にしてくれるツール
githubにテスト用のパッケージを作成してpipでinstallするところまで試してみた
poetryでpackage作成
ちょうどfastapiを試してたので実行するとテストサーバが立ち上がるものを対象にした
完成したリポジトリは以下
GitHub - uni-3/fastapi_mock: testing for python package
poetry設定
初期化
カレントディレクトリをルートリポジトリとして作成していく
poetry init各設問が表示されるので適当に答えていくpyproject.tomlが作成される
以下ではPackage nameはfastapi_mockとして作成していく
python script
fastapiのチュートリアルコードほぼそのまま
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str=None):
"""
Parameters
----------
- item id
- query string
Returns
-------
- json
"""
return {"item_id": item_id, "q": q}
def main():
# for local
uvicorn.run(app, host="0.0.0.0", port=8000)
if __name__ == '__main__':
main()必要なpackageを追加するには以下のようにすれば良い
poetry add fastapi uvicornローカルで実行
poetry install
poetry run python -m fastapi_mockpublish
配布用ファイル群を生成する
poetry build./dist以下にファイルが生成される
dist以下含む各ファイルをリポジトリに追加してpushすることでpublishする
git pushinstallテスト
pipコマンド
https
pip3 install --user git+https://github.com/uni-3/fastapi_mock.gitssh
pip3 install --user git+ssh://git@github.com:uni-3/fastapi_mock.git実行
インストールされていることを確認して
pip3 list...
fastapi-mock 0.1.0
...実行する
python3
Python 3.7.6 (default, Dec 30 2019, 19:38:26)
[Clang 11.0.0 (clang-1100.0.33.16)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import fastapi_mock
>>> fastapi_mock.main()
INFO: Started server process [52714]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
INFO: 127.0.0.1:56704 - "GET / HTTP/1.1" 200 OK
^CINFO: Shutting down
INFO: Waiting for application shutdown.
INFO: Application shutdown complete.main()が実行された
おまけ
調べたけど使わなかったコマンドとか
実行コマンドの定義
cliなど、コマンドで実行したいときは
pyproject.tomlに以下のように追加するとよい
...
# コマンド
[tool.poetry.scripts]
fastapi_mock = "fastapi_mock:main"poetry run fastapi_mockで実行できる
リポジトリ内のディレクトリにあるpackageを公開する
例えばfastapi_mockリポジトリの特定のディレクトリ(ここではapi/)内にpackageを作った場合のinstall方法
urlのshebangにsubdirectoryを指定すれば良い
https
pip3 install --user git+https://github.com/uni-3/fastapi_mock.git#subdirectory=apissh
pip3 install --user git+ssh://git@github.com:uni-3/fastapi_mock.git#subdirectory=api