🛠️

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

2020/10/12に公開
4

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でインストールする にタイトルおよび本文を変更しました。

GitHubで編集を提案
PY

Discussion

gzgz

インストールし直すには”--ignore-installed”がよくない場合があります。例えば、Gitからファイル削除された時に、それを実行しでも、古いファイルが残ります。"--force-reinstall"がいいかもしれません。