PythonでCLIツールを作ってPyPIに公開せずにpipでインストールする

公開:2020/10/12
更新:2020/10/20
2 min読了の目安(約1900字TECH技術記事

PythonでCLIツールを作って、PyPIにパッケージ公開せずにpipでインストールして使う方法です。

ディレクトリ、ファル構成

プロジェクトディレクトリ直下にsetup.pyを追加します。さらにモジュールディレクトリを作り、そこに __init__.pyと本体main.pyを起きます。

- project
  - module
    + __init__.py
    + main.py
  + setup.py

こんな感じになります。
必要に応じてプロジェクトディレクトリ直下に.gitignore README.md LICENSEも追加します。

参考: https://github.com/dforest/openapi-redoc-schema-def

main.pyに処理を書く

main.pyに処理を実行するメソッドを書きます。

def main():
    print("Hello World!")

setup.pyに設定を書く

setup.pyにpipでインストールするための設定を書きます。

from setuptools import setup

setup(
    name='project name',
    version='0.1.0',
    # install_requres=['PyYAML'], 依存するライブラリ(必要な場合)
    packages=["module"],
    entry_points={
        'console_scripts': [
            "command_name=module.main:main"
        ]
    }
)

moduleは定義したモジュール名(今回は__init__.pyに何も書いてないのでディレクトリ名)、command_nameは実行したいコマンド名を入れます。

参考: https://github.com/dforest/openapi-redoc-schema-def/blob/main/setup.py

インストール

ローカルのソースコード

ローカルのソースコードをインストールする場合は、プロジェクトディレクトリ直下で以下コマンドを実行します。

pip install -e .

GitHubのソースコード

ローカルだとソースコードの場所を変えたり削除したりすると実行できなくなってしまうので、GitHubを経由したほうが管理が楽です。その場合はGitHubにソースコードを上げて、以下を実行します。

pip install git+{GitHubのリポジトリURL}
# pip install git+https://github.com/dforest/openapi-redoc-schema-def

インストールし直す

ソースコードを変えて、setup.pyのバージョンを上げずにインストールし直したい場合は--force-reinstallオプションを付けます。

pip install --force-reinstall -e .

pip install --force-reinstall git+{GitHubのリポジトリURL}

2020-10-13 @walking_on_iceさんの指摘により pip install -I -> pip install --force-reinstall にコマンドを変更しました。

参考:python - Difference between pip install options "ignore-installed" and "force-reinstall" - Stack Overflow

2020-10-20 @えんぶんさんの指摘により 公開せずにPyPIでインストールする -> PyPIに公開せずにpipでインストールする にタイトルおよび本文を変更しました。