94

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

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

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

違いは何ですか?最初のアプローチでは、スクリプトに適切で具体的な名前を選択できるようですが、他に違いはありますか? 本来の目的の違い、互換性 (setuptools、distutils、...?)、使い方、...? 私は非常に混乱しており、詳細な返信があれば、私 (およびおそらく他の人) がこれらすべてを適切に理解するのに役立つ可能性があります。

更新:私が質問したので、PyPAはトピックに関するこれらのクールなドキュメントを公開しました。

4

4 に答える 4

57

(すばらしい) Click パッケージのドキュメントでは、スクリプトの代わりにエントリ ポイントを使用するいくつかの理由が示唆されています。

  1. クロスプラットフォームの互換性と
  2. インタープリターが に割り当て__name__られるのを回避し__main__ます。これにより、コードが 2 回インポートされる可能性があります (別のモジュールがスクリプトをインポートする場合)。

クリックはentry_points、ところで、として使用する関数を実装するための良い方法です。

于 2015-01-23T22:25:20.627 に答える
15

コマンドライン実行可能ファイルを作成するこれら2つの方法の主な違いの1つは、アプローチ(最初の例)では、スクリプト内setuptoolsで関数を呼び出す必要があることです-あなたの場合、これは. ただし、アプローチ(2番目の例)では、スクリプトを直接呼び出します(これにより、拡張子の有無にかかわらずリストできます)。funcmoduledistutils

于 2013-09-24T15:28:21.630 に答える
9

セットアップ ツールのエントリ ポイント アプローチ (#1) には、 Windows 上で通常の Windows プログラムのようにダブルクリックして起動できる .exe が作成されるという利点もあります。これは、posix ライクなシステムの bin パスにスクリプトを配置することに加えてです。

于 2014-11-23T01:46:57.823 に答える
4

もう 1 つの違いは、console_scripts を使用すると、モジュールの__init__ファイルが実行されたことです。スクリプトのみを使用する場合、モジュール__init__は実行されず、スクリプトのみが実行されました。

于 2017-10-20T18:25:21.503 に答える