uni farm

poetryでpython packageをgithub urlで公開

poetryは、パッケージマネージメントや、パッケージ作成を簡単にしてくれるツール

githubにテスト用のパッケージを作成してpipでinstallするところまで試してみた

poetryでpackage作成

ちょうどfastapiを試してたので実行するとテストサーバが立ち上がるものを対象にした

完成したリポジトリは以下

GitHub - uni-3/fastapi_mock: testing for python package

poetry設定

初期化

カレントディレクトリをルートリポジトリとして作成していく

poetry init

各設問が表示されるので適当に答えていくpyproject.tomlが作成される

以下ではPackage namefastapi_mockとして作成していく

python script

fastapiのチュートリアルコードほぼそのまま

fastapi_mock.py
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_mock
publish

配布用ファイル群を生成する

poetry build

./dist以下にファイルが生成される

dist以下含む各ファイルをリポジトリに追加してpushすることでpublishする

git push

installテスト

pipコマンド

https
pip3 install --user git+https://github.com/uni-3/fastapi_mock.git
ssh
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に以下のように追加するとよい

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=api
ssh
pip3 install --user git+ssh://git@github.com:uni-3/fastapi_mock.git#subdirectory=api

参考

2022, Built with Gatsby. This site uses Google Analytics.