5. ビルドされたディストリビューションの作成—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/distutils/builtdist
移動先:案内検索

5.5。 構築されたディストリビューションの作成

ノート

このドキュメントは、 https://setuptools.readthedocs.io/en/latest/setuptools.htmlのsetuptoolsドキュメントが、現在ここに含まれているすべての関連情報を個別にカバーするまでのみ保持されます。


「ビルドされたディストリビューション」は、おそらく「バイナリパッケージ」または「インストーラー」(バックグラウンドに応じて)のいずれかとして考えることに慣れているものです。 ただし、Pythonのソースコードやバイトコードのみが含まれている可能性があるため、必ずしもバイナリである必要はありません。 その言葉はすでにPythonで話されているので、私たちはそれをパッケージとは呼びません。 (そして「インストーラー」は、主流のデスクトップシステムの世界に固有の用語です。)

ビルドされたディストリビューションは、モジュールディストリビューションのインストーラーの作業をできるだけ簡単にする方法です。RPMベースのLinuxシステムのユーザーにとっては、バイナリRPMです。 Windowsユーザーの場合、これは実行可能インストーラーです。 DebianベースのLinuxユーザーの場合、これはDebianパッケージです。 などなど。 明らかに、誰も太陽の下ですべてのプラットフォーム用に構築されたディストリビューションを作成することはできません。そのため、Distutilsは、モジュール開発者がパッケージャーと呼ばれる中間種でありながら、専門分野であるコードの記述とソースディストリビューションの作成に集中できるように設計されています。 は、ソースディストリビューションを、パッケージャーと同じ数のプラットフォーム用のビルドされたディストリビューションに変えるために生まれました。

もちろん、モジュール開発者は独自のパッケージャーである可能性があります。 または、パッケージャーは、元の開発者がアクセスできないプラットフォームにアクセスできる「そこにいる」ボランティアである可能性があります。 または、ソフトウェアが定期的に新しいソースディストリビューションを取得し、ソフトウェアがアクセスできる数のプラットフォーム用に構築されたディストリビューションに変換することもできます。 パッケージャは、誰であるかに関係なく、セットアップスクリプトと bdist コマンドファミリを使用してビルドされたディストリビューションを生成します。

簡単な例として、Distutilsソースツリーで次のコマンドを実行すると、次のようになります。

python setup.py bdist

次に、Distutilsはモジュールディストリビューション(この場合はDistutils自体)をビルドし、(buildディレクトリにも)「偽の」インストールを実行し、プラットフォーム用にビルドされたディストリビューションのデフォルトタイプを作成します。 ビルドされたディストリビューションのデフォルトの形式は、Unixでは「ダム」tarファイル、Windowsでは単純な実行可能インストーラーです。 (そのtarファイルは、機能するために特定の場所で解凍する必要があるため、「ダム」と見なされます。)

したがって、Unixシステムでの上記のコマンドはDistutils-1.0.plat.tar.gzを作成します。 このtarballを適切な場所から解凍すると、ソースディストリビューションをダウンロードしてpython setup.py installを実行した場合と同じようにDistutilsがインストールされます。 (「正しい場所」は、 bdist_dumb コマンドに指定されたオプションに応じて、ファイルシステムのルートまたはPythonのprefixディレクトリのいずれかです。デフォルトでは、[X211Xに関連するダム分布を作成します。 ] 。)

明らかに、純粋なPythonディストリビューションの場合、これはpython setup.py installを実行するよりも簡単ではありませんが、コンパイルが必要な拡張機能を含む非純粋なディストリビューションの場合、誰かができることの違いを意味する可能性があります。拡張機能を使用するかどうか。 また、RPMパッケージやWindowsの実行可能インストーラーなど、「スマート」に構築されたディストリビューションを作成すると、ディストリビューションに拡張機能が含まれていない場合でも、ユーザーにとってはるかに便利です。

bdist コマンドには--formatsオプションがあり、 sdist コマンドと同様に、生成するビルドディストリビューションのタイプを選択できます。たとえば、

python setup.py bdist --format=zip

Unixシステムで実行すると、Distutils-1.0.plat.zipが作成されます。この場合も、このアーカイブはルートディレクトリから解凍され、Distutilsがインストールされます。

ビルドされたディストリビューションで使用可能な形式は次のとおりです。

フォーマット 説明 ノート
gztar gzipで圧縮されたtarファイル(.tar.gz (1)
bztar bzipされたtarファイル(.tar.bz2
xztar xzipされたtarファイル(.tar.xz
ztar 圧縮されたtarファイル(.tar.Z (3)
tar tarファイル(.tar
zip zipファイル(.zip (2),(4)
rpm RPM (5)
pkgtool Solaris pkgtool
sdux HP-UX swinstall
wininst Windows用の自己解凍型ZIPファイル (4)
msi Microsoftインストーラー。

バージョン3.5で変更: xztar形式のサポートが追加されました。


ノート:

  1. Unixのデフォルト
  2. Windowsのデフォルト
  3. 外部の compress ユーティリティが必要です。
  4. 外部の zip ユーティリティまたは zipfile モジュール(Python 1.6以降の標準Pythonライブラリの一部)のいずれかが必要です
  5. 外部の rpm ユーティリティ、バージョン3.0.4以降が必要です(rpm --versionを使用して、使用しているバージョンを確認してください)

bdist コマンドを--formatsオプションと一緒に使用する必要はありません。 関心のある形式を直接実装するコマンドを使用することもできます。 これらの bdist 「サブコマンド」のいくつかは、実際にはいくつかの同様の形式を生成します。 たとえば、 bdist_dumb コマンドは、すべての「ダム」アーカイブ形式(targztarbztarxztar、[ X219X] 、zip)、および bdist_rpm は、バイナリRPMとソースRPMの両方を生成します。 bdist サブコマンド、およびそれぞれによって生成される形式は次のとおりです。

指示 フォーマット
bdist_dumb tar、gztar、bztar、xztar、ztar、zip
bdist_rpm rpm、srpm
bdist_wininst wininst
bdist_msi msi

ノート

bdist_wininstは、Python3.8以降非推奨になりました。


次のセクションでは、個々の bdist _ * コマンドについて詳しく説明します。

5.1。 RPMパッケージの作成

RPM形式は、Red Hat、SuSE、Mandrakeなどの多くの一般的なLinuxディストリビューションで使用されています。 これらのいずれか(または他のRPMベースのLinuxディストリビューションのいずれか)が通常の環境である場合、同じディストリビューションの他のユーザー用にRPMパッケージを作成するのは簡単です。 モジュールディストリビューションの複雑さとLinuxディストリビューション間の違いによっては、さまざまなRPMベースのディストリビューションで動作するRPMを作成できる場合もあります。

モジュールディストリビューションのRPMを作成する通常の方法は、 bdist_rpm コマンドを実行することです。

python setup.py bdist_rpm

または、--formatオプションを指定した bdist コマンド:

python setup.py bdist --formats=rpm

前者では、RPM固有のオプションを指定できます。 後者を使用すると、1回の実行で複数の形式を簡単に指定できます。 両方を行う必要がある場合は、複数の bdist _ * コマンドとそのオプションを明示的に指定できます。

python setup.py bdist_rpm --packager="John Doe <[email protected]>" \
                bdist_wininst --target-version="2.0"

RPMパッケージの作成は、.specファイルによって駆動されます。これは、Distutilsの使用がセットアップスクリプトによって駆動されるのと同じです。 作業を楽にするために、 bdist_rpm コマンドは通常、セットアップスクリプト、コマンドライン、およびDistutils構成ファイルで指定した情報に基づいて.specファイルを作成します。 .specファイルのさまざまなオプションとセクションは、セットアップスクリプトのオプションから次のように派生します。

RPM .specファイルオプションまたはセクション Distutilsセットアップスクリプトオプション
名前 name
要約(前文) description
バージョン version
ベンダー authorauthor_email 、 また - &maintainermaintainer_email
著作権 license
URL url
%description (section) long_description

さらに、.specファイルには、セットアップスクリプトに対応するオプションがない多くのオプションがあります。 これらのほとんどは、 bdist_rpm コマンドのオプションを介して次のように処理されます。

RPM .specファイルオプションまたはセクション bdist_rpm オプション デフォルト値
リリース release 「1」
グループ group 「開発/ライブラリ」
ベンダー vendor (上記を参照)
パッケージャー packager (なし)
提供します provides (なし)
必要 requires (なし)
競合 conflicts (なし)
廃止 obsoletes (なし)
分布 distribution_name (なし)
BuildRequires build_requires (なし)
アイコン icon (なし)

明らかに、コマンドラインでこれらのオプションをいくつか指定するのは面倒でエラーが発生しやすいため、通常はセットアップ構成ファイルsetup.cfgに配置するのが最善です。セクションセットアップの記述を参照してください。構成ファイル。 多くのPythonモジュールディストリビューションを配布またはパッケージ化する場合は、それらすべてに適用されるオプションを個人のDistutils構成ファイル(~/.pydistutils.cfg)に配置することをお勧めします。 このファイルを一時的に無効にする場合は、--no-user-cfgオプションをsetup.pyに渡すことができます。

バイナリRPMパッケージを構築するには3つのステップがあり、それらはすべてDistutilsによって自動的に処理されます。

  1. パッケージを説明する.specファイルを作成します(Distutilsセットアップスクリプトに類似しています。実際、セットアップスクリプトの情報の多くは.specファイルにまとめられます)
  2. ソースRPMを作成します
  3. 「バイナリ」RPMを作成します(モジュールディストリビューションにPython拡張機能が含まれているかどうかに応じて、バイナリコードが含まれる場合と含まれない場合があります)。

通常、RPMは最後の2つのステップをまとめます。 Distutilsを使用する場合、通常、3つのステップすべてが一緒にバンドルされます。

必要に応じて、これらの3つのステップを分離できます。 --spec-onlyオプションを使用して、 bdist_rpm.specファイルを作成して終了させることができます。 この場合、.specファイルは「配布ディレクトリ」(通常はdist/)に書き込まれますが、--dist-dirオプションでカスタマイズできます。 (通常、.specファイルは、 bdist_rpm によって作成された一時ディレクトリの「ビルドツリー」の奥深くに配置されます。)


5.2。 Windowsインストーラーの作成

警告

bdist_wininstは、Python3.8以降非推奨になりました。


実行可能インストーラーは、Windowsでのバイナリ配布の自然な形式です。 これらは、優れたグラフィカルユーザーインターフェイスを表示し、セットアップスクリプトのメタデータから取得した、インストールするモジュール配布に関する情報を表示し、ユーザーにいくつかのオプションを選択させ、インストールを開始またはキャンセルします。

メタデータはセットアップスクリプトから取得されるため、Windowsインストーラーの作成は通常、実行するのと同じくらい簡単です。

python setup.py bdist_wininst

または、--formatsオプションを指定した bdist コマンド:

python setup.py bdist --formats=wininst

純粋なモジュールディストリビューション(純粋なPythonモジュールとパッケージのみを含む)がある場合、結果のインストーラーはバージョンに依存せず、foo-1.0.win32.exeのような名前になります。 wininstバイナリディストリビューションの作成は、Windowsシステムでのみサポートされていることに注意してください。

純粋でないディストリビューションを使用している場合、拡張機能はWindowsプラットフォームでのみ作成でき、Pythonのバージョンに依存します。 インストーラーのファイル名はこれを反映し、foo-1.0.win32-py2.0.exeの形式になります。 サポートするPythonバージョンごとに個別のインストーラーを作成する必要があります。

インストーラーは、通常の最適化モードでターゲットシステムにインストールした後、純粋なモジュールをバイトコードにコンパイルしようとします。 何らかの理由でこれを発生させたくない場合は、--no-target-compileおよび/または--no-target-optimizeオプションを指定して bdist_wininst コマンドを実行できます。

デフォルトでは、インストーラーは実行時にクールな「Python Powered」ロゴを表示しますが、--bitmapオプションを使用してWindows .bmpファイルである必要がある独自の152x261ビットマップを提供することもできます。

インストーラーは、実行時にデスクトップの背景ウィンドウに大きなタイトルも表示します。これは、ディストリビューションの名前とバージョン番号から構成されます。 --titleオプションを使用して、これを別のテキストに変更できます。

インストーラーファイルは「配布ディレクトリ」に書き込まれます—通常はdist/ですが、--dist-dirオプションでカスタマイズできます。


5.3。 Windowsでのクロスコンパイル

Python 2.6以降、distutilsはWindowsプラットフォーム間でクロスコンパイルできます。 実際には、これは、適切なツールがインストールされていれば、32ビットバージョンのWindowsを使用して64ビット拡張機能を作成できることを意味します。その逆も同様です。

代替プラットフォーム用にビルドするには、ビルドコマンドに--plat-nameオプションを指定します。 現在、有効な値は「win32」および「win-amd64」です。 たとえば、32ビットバージョンのWindowsでは、次のコマンドを実行できます。

python setup.py build --plat-name=win-amd64

拡張機能の64ビットバージョンをビルドします。 Windowsインストーラーもこのオプションをサポートしているため、次のコマンドを実行します。

python setup.py build --plat-name=win-amd64 bdist_wininst

32ビットバージョンのWindowsで64ビットのインストール実行可能ファイルを作成します。

クロスコンパイルするには、Pythonソースコードをダウンロードし、対象のプラットフォーム用にPython自体をクロスコンパイルする必要があります。Pythonのバイナリインストールからはできません(他のプラットフォーム用の.libなどのファイルが含まれていないため)。実際には、これは、32ビットオペレーティングシステムのユーザーがVisual Studio 2008を使用してPythonソースツリーでPCbuild/PCbuild.slnソリューションを開き、クロスする前に「pythoncore」プロジェクトの「x64」構成をビルドする必要があることを意味します-拡張機能のコンパイルが可能です。

デフォルトでは、Visual Studio2008は64ビットコンパイラまたはツールをインストールしないことに注意してください。 Visual Studioのセットアッププロセスを再実行し、これらのツールを選択する必要がある場合があります([コントロールパネル]-> [追加/削除]プログラムを使用すると、既存のインストールを確認または変更するのに便利です)。

5.3.1。 インストール後のスクリプト

Python 2.3以降、インストール後のスクリプトは--install-scriptオプションで指定できます。 スクリプトのベース名を指定する必要があります。また、スクリプトのファイル名も、セットアップ関数のscripts引数にリストする必要があります。

このスクリプトは、argv[1]-installに設定して、すべてのファイルがコピーされた後のターゲットシステムでのインストール時に実行され、argv[1]-removeに設定します。

インストールスクリプトはWindowsインストーラーに埋め込まれて実行され、すべての出力(sys.stdoutsys.stderr)はバッファーにリダイレクトされ、スクリプトの終了後にGUIに表示されます。

このコンテキストで特に役立ついくつかの関数は、インストールスクリプトの追加の組み込み関数として使用できます。

directory_created(path)

file_created(path)

これらの関数は、インストール時にインストール後のスクリプトによってディレクトリまたはファイルが作成されたときに呼び出す必要があります。 パスをアンインストーラーに登録するため、ディストリビューションがアンインストールされると削除されます。 安全のため、ディレクトリは空の場合にのみ削除されます。
get_special_folder_path(csidl_string)

この機能は、スタートメニューやデスクトップなどのWindows上の特別なフォルダの場所を取得するために使用できます。 フォルダへのフルパスを返します。 csidl_string は、次のいずれかの文字列である必要があります。

"CSIDL_APPDATA"

"CSIDL_COMMON_STARTMENU"
"CSIDL_STARTMENU"

"CSIDL_COMMON_DESKTOPDIRECTORY"
"CSIDL_DESKTOPDIRECTORY"

"CSIDL_COMMON_STARTUP"
"CSIDL_STARTUP"

"CSIDL_COMMON_PROGRAMS"
"CSIDL_PROGRAMS"

"CSIDL_FONTS"

フォルダを取得できない場合は、 OSError が発生します。

使用可能なフォルダーは、Windowsの正確なバージョンと、おそらく構成によって異なります。 詳細については、SHGetSpecialFolderPath()関数に関するMicrosoftのドキュメントを参照してください。

create_shortcut(target, description, filename[, arguments[, workdir[, iconpath[, iconindex]]]])
この関数はショートカットを作成します。 target は、ショートカットによって開始されるプログラムへのパスです。 description はショートカットの説明です。 filename は、ユーザーに表示されるショートカットのタイトルです。 arguments は、コマンドライン引数がある場合はそれを指定します。 workdir は、プログラムの作業ディレクトリです。 iconpath はショートカットのアイコンを含むファイルであり、 iconindex はファイル iconpath 内のアイコンのインデックスです。 繰り返しになりますが、詳細については、IShellLinkインターフェイスに関するMicrosoftのドキュメントを参照してください。


5.4。 Vistaユーザーアクセス制御(UAC)

Python 2.6以降、bdist_wininstは--user-access-controlオプションをサポートします。 デフォルトは「none」(UAC処理が行われないことを意味します)であり、他の有効な値は「auto」(Pythonがすべてのユーザーにインストールされている場合はUAC昇格のプロンプトを意味します)および「force」(常に昇格のプロンプトを意味します)です。

ノート

bdist_wininstは、Python3.8以降非推奨になりました。