# 1 `distutils.core` -- Distutils のコア機能

Distutilsを使うためにインストールする必要がある唯一のモジュールが `distutils.core`モジュールです。`setup()`関数 (セットアップスクリプトから呼び出されます)を提供します。間接的に `distutils.dist.Distribution`クラスと `distutils.cmd.Command` クラスを提供します。

`setup`( | arguments)

  全てを実行する基本的な関数で、Distutilsでできるほとんどのことを実行し ます。 XXXXを参照してください。

  setup関数はたくさんの引数をとります。以下のテーブルにまとめます。

  argument name | value | type
  --- | --- | ---
  name | パッケージの名前 | 文字列
  version | パッケージのバージョン番号 | `distutils.version`を参照してください
  description | 1行で書いたパッケージ解説 | 文字列
  long_description | パッケージの長い解説 | 文字列
  author | パッケージ作者の名前 | 文字列
  author_email | パッケージ作者のemailアドレス | 文字列
  maintainer | 現在のメンテナの名前(パッケージ作者と異なる場合) | 文字列
  maintainer_email | 現在のメンテナのemailアドレス(パッケージ作者と異なる場合) |
  url | パッケージのURL(ホームページ) | URL
  download_url | パッケージダウンロード用URL | URL
  packages | distutilsが操作するPythonパッケージのリスト | 文字列のリスト
  py_modules | distutilsが操作するPythonモジュールのリスト | 文字列のリスト
  scripts | ビルドおよびインストールする単体スクリプトファイルのリスト | 文字列のリスト
  ext_modules | ビルドする拡張モジュール | `distutils.core.Extension`インスタンスのリスト
  classifiers | パッケージのTrove カテゴリのリスト | XXX もっと良い定義へのリンク
  distclass | 使用する `Distribution`クラス | `distutils.core.Distribution`のサブクラス
  script_name | setup.pyスクリプトの名前 - デフォルトでは`sys.argv[0]` | 文字列
  script_args | セットアップスクリプトの引数 | 文字列のリスト
  options | セットアップスクリプトのデフォルト引数 | 文字列
  license | パッケージのライセンス |
  keywords | 説明用メタデータ。 PEP 314を参照してください |
  platforms |  |
  cmdclass | コマンド名から `Command` サブクラスへのマッピング | 辞書

`run_setup`( | script_name[, script_args=`None`, stop_after=`'run'`])

  制御された環境でセットアップスクリプトを実行し、いろいろなものを操作する `distutils.dist.Distribution`クラスのインスタンスを返します。 これはディストリビューションのメタデータ(キーワード引数scriptと して 関数`setup()`に渡される)を参照したり、設定ファイルやコマ ンドラインの内容を調べる時に便利です。

  script_name は `execfile()`で実行されるファイルです。 sys.argv[0] は、 呼び出しのためにscript_nameと置換されます。 script_args は文字列のリストです。もし提供されていた場合、 sys.argv[1:] は、呼び出しのためにscript_args で置換されます。

  stop_after は いつ動作を停止するか関数`setup()` に伝えます。 とりうる値は:

  値 | 説明
  --- | ---
  init | `Distribution`インスタンスを作成し、キーワード引数を `setup()`に渡したあとに停止する。
  config | 設定ファイルをパーズしたあと停止する(そしてそのデータは `Distribution`インスタンスに保存される)。
  commandline | コマンドライン (`sys.argv[1:]` または script_args) がパーズされたあとに停止する (そしてそのデータは `Distribution`インスタンスに保存される)。
  run | 全てのコマンドを実行したあとに停止する(関数 `setup()` を通常の方法で呼び出した場合と同じ)。 デフォルト値。

これに加えて、`distutils.core`モジュールは他のモジュールにある いくつかのクラスを公開しています。

- `Extension` は `distutils.extension` から。
- `Command` は `distutils.cmd` から。
- `Distribution` は `distutils.dist` から。

それぞれの簡単な説明を以下に記します。完全な説明についてはそれぞれの モジュールをごらんください。

class `Extension`

  Extension クラスは、セットアップスクリプト中で C または C++拡張モジュー ルを表します。コンストラクタで以下のキーワード引数をとります。

  argument name | value | type
  --- | --- | ---
  name | 拡張のフルネーム(パッケージを含む) -- ファイル名やパス 名ではなく、Pythonのピリオド区切りの名前 | string
  sources | ソースファイル名のリスト。配布物ルートディレクトリ (setupスクリプトのある場所) からの相対パス、プラットフォーム独立のた めUnix形式(スラッシュで区切る)で記述します。ソースファイルは C, C++, SWIG (.i)、特定プラットフォーム用のリソースファイル、その他 `build_ext`コマンドがソースファイルだと認識するどの形式でもありえます。 | string
  include_dirs | C/C++ヘッダファイルを検索するディレクトリのリ スト(プラットフォーム独立のため Unix 形式で記述する) | string
  define_macros | 定義するマクロのリスト; それぞれのマクロは 2要素のタプルで定義されます。'値'には定義しようとしている文字列、 または内容なしで定義する場合は`None`(ソースコード中で `#define FOO`と書く、または Unix Cコンパイラのコマンドラインで -DFOO を指定するのと等価です)を指定します。 | (string,string) または (name,`None`) のタプル
  undef_macros | 定義を消すマクロのリスト | string
  library_dirs | リンク時にC/C++ライブラリを検索するディレクトリのリスト | string
  libraries | リンクするライブラリ名のリスト (ファイル名やパスではない) | string
  runtime_library_dirs | 実行時(shared extensionでは、拡張が読み 込まれる時)に C/C++ライブラリを探索するディレクトリのリスト | string
  extra_objects | 追加でリンクするファイル('sources'に対応するコー ドが含まれていないファイル、バイナリ形式のリソースファイルなど)のリスト | string
  extra_compile_args | 'sources'のソースをコンパイルする時に 追加するプラットフォーム特有またはコンパイラ特有の情報 コマンドラインを利用できるプラットホームとコンパイラでは、これは通常 コマンドライン引数のリストですが、他のプラットホームでも、それは何か に使えます。 | string
  extra_link_args | オブジェクトファイルをリンクして拡張(または新しいPythonインタプ リタ)を作る時に 追加するプラットフォーム特有またはコンパイラ特有の情報 'extra_compile_args'に似た実装です。 | string
  export_symbols | shared extensionからエクスポートされるシンボルのリスト。 全てのプラットフォームでは使われず、 Python拡張(典型的には `init` + extension_name という1つのシンボル だけエクスポートする)に一般的に必要なものでもない。 | string
  depends | 拡張が依存するファイルのリスト | string
  language | 拡張の言語 (例: `'c'`, `'c++'`, `'objc'`)。指定しなければソースの拡張子で検出される。 | string

class `Distribution`
  `Distribution`はPythonソフトウェアパッケージをどのようにビルド、 インストール、パッケージするかを定義する。

  `Distribution`のコンストラクタが取りうる キーワード引数のリストに関しては、`setup()`関数を見てください。 `setup()`は`Distribution`のインスタンスを作ります。

class `Command`
  `Command`クラス(そのサブクラスのインスタンス)はdistutilsのあるコマン ドを実装します。