1.1。 Distutilsの紹介
ノート
このドキュメントは、 https://setuptools.readthedocs.io/en/latest/setuptools.htmlのsetuptools
ドキュメントが、現在ここに含まれているすべての関連情報を個別にカバーするまでのみ保持されます。
このドキュメントでは、開発者/ディストリビューターの役割に焦点を当てて、Distutilsを使用してPythonモジュールを配布する方法について説明します。Pythonモジュールのインストールに関する情報をお探しの場合は、 Pythonモジュールのインストール(レガシーバージョン)[X262X ]章。
1.1。 概念と用語
Distutilsの使用は、モジュール開発者にとっても、サードパーティモジュールをインストールするユーザー/管理者にとっても非常に簡単です。 開発者としてのあなたの責任は(もちろん、しっかりした、十分に文書化され、十分にテストされたコードを書くことは別として!)です。
- セットアップスクリプトを書く(慣例により
setup.py
) - (オプション)セットアップ構成ファイルを書き込む
- ソースディストリビューションを作成する
- (オプション)1つ以上のビルドされた(バイナリ)ディストリビューションを作成します
これらの各タスクについては、このドキュメントで説明しています。
すべてのモジュール開発者が多数のプラットフォームにアクセスできるわけではないため、多数のビルドされたディストリビューションを作成することを期待できるとは限りません。 このニーズに対応するために、パッケージャーと呼ばれる仲介者のクラスが生まれることが期待されています。 パッケージャは、モジュール開発者によってリリースされたソースディストリビューションを取得し、それらを1つ以上のプラットフォームでビルドし、結果としてビルドされたディストリビューションをリリースします。 したがって、最も人気のあるプラットフォームのユーザーは、単一のセットアップスクリプトを実行したり、コード行をコンパイルしたりすることなく、プラットフォームに最も自然な方法で最も人気のあるPythonモジュールディストリビューションをインストールできます。
1.2。 簡単な例
セットアップスクリプトは通常非常に単純ですが、Pythonで記述されているため、セットアップスクリプトに任意のコストのかかる操作を入れることに注意する必要がありますが、それを使用して実行できることには任意の制限はありません。 たとえば、Autoconfスタイルのconfigureスクリプトとは異なり、セットアップスクリプトは、モジュールディストリビューションのビルドとインストールの過程で複数回実行される場合があります。
ファイルfoo.py
に含まれているfoo
というモジュールを配布するだけの場合、セットアップスクリプトは次のように簡単にできます。
from distutils.core import setup
setup(name='foo',
version='1.0',
py_modules=['foo'],
)
いくつかの観察:
- Distutilsに提供するほとんどの情報は、
setup()
関数のキーワード引数として提供されます。 - これらのキーワード引数は、パッケージメタデータ(名前、バージョン番号)とパッケージの内容に関する情報(この場合は純粋なPythonモジュールのリスト)の2つのカテゴリに分類されます。
- モジュールはファイル名ではなくモジュール名で指定されます(パッケージと拡張機能についても同じことが言えます)
- プロジェクトの名前、電子メールアドレス、URLなど、もう少しメタデータを指定することをお勧めします(例については、セクションセットアップスクリプトの記述を参照してください)。
このモジュールのソースディストリビューションを作成するには、上記のコードを含むセットアップスクリプトsetup.py
を作成し、ターミナルから次のコマンドを実行します。
python setup.py sdist
Windowsの場合は、コマンドプロンプトウィンドウ(
)を開き、コマンドを次のように変更します。setup.py sdist
sdist は、セットアップスクリプトsetup.py
とモジュールfoo.py
を含むアーカイブファイル(たとえば、Unixではtarball、WindowsではZIPファイル)を作成します。 アーカイブファイルの名前はfoo-1.0.tar.gz
(または.zip
)で、ディレクトリfoo-1.0
に解凍されます。
エンドユーザーがfoo
モジュールのインストールを希望する場合は、foo-1.0.tar.gz
(または.zip
)をダウンロードして解凍し、foo-1.0
ディレクトリ-実行
python setup.py install
これにより、最終的にfoo.py
がPythonインストールのサードパーティモジュールの適切なディレクトリにコピーされます。
この簡単な例は、Distutilsのいくつかの基本的な概念を示しています。 まず、開発者とインストーラーの両方が同じ基本的なユーザーインターフェイスを持っています。 セットアップスクリプト。 違いは、使用するDistutils コマンドです。 sdist コマンドはほとんどモジュール開発者専用ですが、 install はインストーラー向けです(ほとんどの開発者は時々独自のコードをインストールする)。
ユーザーにとって物事を本当に簡単にしたい場合は、ユーザー用に1つ以上のビルドされたディストリビューションを作成できます。 たとえば、Windowsマシンで実行していて、他のWindowsユーザーが簡単に操作できるようにしたい場合は、 bdist_wininst を使用して実行可能インストーラー(このプラットフォームに最適な種類のビルドディストリビューション)を作成できます。指図。 例えば:
python setup.py bdist_wininst
現在のディレクトリに実行可能インストーラーfoo-1.0.win32.exe
を作成します。
その他の便利なビルド配布フォーマットは、 bdist_rpm コマンドで実装されるRPM、Solaris pkgtool ( bdist_pkgtool )、およびHP-UX swinstall ( bdist_sdux )。 たとえば、次のコマンドはfoo-1.0.noarch.rpm
という名前のRPMファイルを作成します。
python setup.py bdist_rpm
( bdist_rpm コマンドは rpm 実行可能ファイルを使用するため、これはRed Hat Linux、SuSE Linux、Mandrake LinuxなどのRPMベースのシステムで実行する必要があります。)
を実行することで、いつでも利用可能な配布形式を確認できます。
python setup.py bdist --help-formats
1.3。 Pythonの一般的な用語
このドキュメントを読んでいる場合は、モジュールや拡張機能などが何であるかを理解していると思います。 それでも、全員が共通の出発点から操作していることを確認するために、Pythonの一般的な用語の次の用語集を提供します。
- モジュール
- Pythonでのコードの再利用性の基本単位:他のコードによってインポートされたコードのブロック。 ここでは、純粋なPythonモジュール、拡張モジュール、パッケージの3種類のモジュールが関係しています。
- 純粋なPythonモジュール
- Pythonで記述され、単一の
.py
ファイル(および場合によっては関連する.pyc
ファイル)に含まれるモジュール。 「純粋なモジュール」と呼ばれることもあります。 - 拡張モジュール
- Python実装の低水準言語で記述されたモジュール:Pythonの場合はC / C ++、Jythonの場合はJava。 通常、動的にロード可能な単一のプリコンパイル済みファイルに含まれます。 Unix上のPython拡張機能用の共有オブジェクト(
.so
)ファイル、Windows上のPython拡張機能用のDLL(.pyd
拡張機能を指定)、またはJython拡張機能用のJavaクラスファイル。 (現在、DistutilsはPythonのC / C ++拡張機能のみを処理することに注意してください。) - パッケージ
- 他のモジュールを含むモジュール。 通常、ファイルシステム内のディレクトリに含まれ、ファイル
__init__.py
の存在によって他のディレクトリと区別されます。 - ルートパッケージ
- パッケージの階層のルート。 (
__init__.py
ファイルがないため、これは実際にはパッケージではありません。 しかし、それを何かと呼ぶ必要があります。)標準ライブラリの大部分はルートパッケージにあり、より大きなモジュールコレクションに属していない多くの小さなスタンドアロンのサードパーティモジュールも同様です。 通常のパッケージとは異なり、ルートパッケージ内のモジュールは多くのディレクトリにあります。実際、sys.path
にリストされているすべてのディレクトリは、モジュールをルートパッケージに提供します。
1.4。 Distutils固有の用語
次の用語は、Distutilsを使用してPythonモジュールを配布するドメインに特に適用されます。
- モジュール配布
- 単一のダウンロード可能なリソースとして一緒に配布され、まとめてインストールされることを意図したPythonモジュールのコレクション。 よく知られているモジュールディストリビューションの例としては、NumPy、SciPy、Pillow、またはmxBaseがあります。 (これはパッケージと呼ばれますが、この用語はすでにPythonコンテキストで使用されています。単一のモジュール配布には、0、1、または多数のPythonパッケージが含まれる場合があります。)
- 純粋なモジュール配布
- 純粋なPythonモジュールとパッケージのみを含むモジュールディストリビューション。 「純粋なディストリビューション」と呼ばれることもあります。
- 非純粋なモジュール配布
- 少なくとも1つの拡張モジュールを含むモジュールディストリビューション。 「非純粋なディストリビューション」と呼ばれることもあります。
- 配布ルート
- ソースツリー(またはソースディストリビューション)の最上位ディレクトリ。
setup.py
が存在するディレクトリ。 通常、setup.py
はこのディレクトリから実行されます。