web-dev-qa-db-ja.com

entry_points / console_scriptsとsetup.pyのスクリプトの違いは?

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

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

そして

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

違いは何ですか?最初のアプローチでは、スクリプトにニースの特定の名前を選択できますが、他に違いはありますか?異なる元の目的、互換性(setuptools、distutils、...?)、使用法、...?私は非常に混乱しており、ニースの詳細な返信は私(そしておそらく他の人も)がこれらすべてを適切に理解するのに役立つでしょう。

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

53
Honza Javorek

(素晴らしい)Clickパッケージのドキュメント いくつかの理由をお勧めします スクリプトの代わりにエントリポイントを使用して、

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

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

36
jfeala

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

13
plessthanpt05

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

7
Kaushik Ghose

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

0
spacether