SetupTools統合

コマンドラインユーティリティを作成する際には,Unix Shebangsではなくsetuptoolsとともに配布されるモジュールとして作成することを提案する.

なぜそんなことをしたのですか。理由はたくさんあります

  1. 従来手法の問題の1つは、Pythonインタプリタがロードした最初のモジュールの名前が正しくないことです。これは小さな問題に聞こえるかもしれないが、それはかなり大きな影響を持っている。

    第1のモジュールはその実際の名前で呼び出されるのではないが,インタプリタはそれを名前に再命名する. __main__ それがそうです。これは完全に有効な名前であるが、別のコードがモジュールから導入されたい場合、その真の名前で2回目の導入をトリガし、突然あなたのコードが2回導入されることを意味する。

  2. すべてのプラットフォームが簡単に実行されるわけではない。LinuxおよびOS Xでは、ファイルの先頭に注釈を追加することができます (#!/usr/bin/env python )と、スクリプトの動作方式は、実行可能ファイル(実行可能ファイルビットが設定されていると仮定する)と同様である。しかし,これはWindows上では機能しない.Windowsでは、インタプリタをファイル拡張子に関連付けることができます(すべてのコンテンツが .py Pythonインタプリタにより実行され),Virtualenvでこのスクリプトを使用するためには問題がある.

    実際,Virtualenvでスクリプトを実行することもOSXやLinuxの問題である.従来の方法を使用する場合、Virtualenv全体を活性化して、正しいPythonインタプリタを使用する必要があります。ユーザーにはあまり親切ではありません。

  3. スクリプトがPythonモジュールである場合にのみ、主な技法が有効です。もしあなたのアプリケーションが大きすぎて、あなたがカバンを使い始めたいなら、問題があります。

序言:序言

Setuptoolsとスクリプトをバンドルするには、Pythonパッケージのスクリプトと setup.py ファイルです。

このようなディレクトリ構造を想像してみてください

yourscript.py
setup.py

内容 yourscript.py

import click

@click.command()
def cli():
    """Example script."""
    click.echo('Hello World!')

内容 setup.py

from setuptools import setup

setup(
    name='yourscript',
    version='0.1.0',
    py_modules=['yourscript'],
    install_requires=[
        'Click',
    ],
    entry_points={
        'console_scripts': [
            'yourscript = yourscript:cli',
        ],
    },
)

不思議なことに entry_points パラメータ以下 console_scripts 各行は、1つのコンソールスクリプトを識別します。等号前の第一部 (= )は生成すべきスクリプトの名前であり,第2部分は導入経路,直後コロンである. (: )Clickコマンドを使用します。

そのとおりです。

テストスクリプト.

スクリプトをテストするには、新しいviralenvを作成し、ソフトウェアパッケージをインストールすることができます。

$ virtualenv venv
$ . venv/bin/activate
$ pip install --editable .

その後、あなたの命令は利用できるはずです。

$ yourscript
Hello World!

バッグの中のスクリプト

スクリプトが増加しており、Pythonパッケージに含まれるスクリプトに切り替えたい場合、必要な変更は非常に少ないです。ディレクトリ構造を以下のように変更すると仮定しましょう。

project/
    yourpackage/
        __init__.py
        main.py
        utils.py
        scripts/
            __init__.py
            yourscript.py
    setup.py

この場合には、使用するのではなく py_modules あなたの setup.py ご利用いただける書類 packages およびsetuptoolsの自動パケット検索サポート.それ以外にも,他のパケットデータを含むことを提案する.

これらは修正された内容になります setup.py

from setuptools import setup, find_packages

setup(
    name='yourpackage',
    version='0.1.0',
    packages=find_packages(),
    include_package_data=True,
    install_requires=[
        'Click',
    ],
    entry_points={
        'console_scripts': [
            'yourscript = yourpackage.scripts.yourscript:cli',
        ],
    },
)