1. ホーム
  2. python

[解決済み] entry_points/console_scriptsとsetup.py内のスクリプトの違い?

2023-02-18 01:01:02

質問

Python コンソールスクリプトをインストールするには、基本的に以下の2つの方法があります。 setup.py :

setup(
    ...
    entry_points = {
        'console_scripts': [
            'foo = package.module:func',
        ],
    }
)

setup(
    ...
    scripts = [
        'scripts/myscript.sh'
    ]
)

どのような違いがあるのでしょうか?最初のアプローチでは、私のスクリプトに素敵で具体的な名前を選択することができますね。異なる本来の目的、互換性 (setuptools, distutils, ...?), 使用法、...? 私はかなり混乱しており、素敵な精巧な応答は、私(そしておそらく他の人も)このすべてを適切に理解するのに役立つ可能性があります。

更新しました。 私が質問して以来 PyPA が公開されました。 このトピックに関するクールなドキュメント .

どのように解決するのですか?

(素晴らしい) Click パッケージのドキュメント は、いくつかの理由を示唆しています。 をスクリプトではなくエントリーポイントを使う理由として挙げています。

  1. クロスプラットフォームの互換性や
  2. インタープリタが __name____main__ に変更すると、コードが二重にインポートされる可能性があります (別のモジュールがあなたのスクリプトをインポートする場合)。

として使用するための関数を実装するための良い方法です。 entry_points として使用するための関数を実装する良い方法です。