この件については何も知りませんが、Python、いくつかのカスタム Python モジュール、PIL などの他の Python モジュール、およびいくつかの EXE 依存関係をすべてネットワーク リポジトリ上にインストールするセットアップ プログラムを作成するための最適なツールまたは方法についての提案が必要です。 、Windows マシン上。リポジトリには、python (msi ファイル)、PIL (exe ファイル)、カスタム python モジュール (pyc ファイル)、および 2 つの Windows 実行可能ファイル (および exe ファイルと zip ファイル) のインストーラーがあります。どんなアドバイスでも大歓迎です。
2 に答える
これは、市販のインストーラー アプリケーションで実行できます。依存する各インストーラーにはサイレント インストール オプションがあるため、インストーラーは各依存関係のインストーラーを正しい順序で呼び出すだけで済みます。Windows インストーラー アプリケーションはどれも好きではないので、特にお勧めしませんが、すべて希望どおりに動作します。
あなたが持っている他のオプションは、独自のpython環境で実行される単一のexeファイルにすべてをバンドルできるpy2exeを使用することです. これのプラス面は、すべてがスタンドアロン環境にあるため、ユーザー環境に Python をインストールすることを心配する必要がなく、ユーザーが Python をアンインストールしてアプリの動作を停止させる可能性がないことです。
私がこれを行う他の方法は、あなたが好むコンパイル済みの Windows 言語で書かれたカスタム exe を使用することですが、これは多くの作業を必要とします。
また、python.exe、dll、および関連コードを適切なディレクトリ相対に手動で配置することにより、インストーラー アプリまたはインストールを処理するスタンドアロン exe を使用して作成したインストーラーで少し作業するだけで、py2exe ルートの利点を得ることができます。アプリケーションコードに。アプリがすべての機能を開始するときに、PYTHONPATH 環境設定をいじる必要があるかもしれませんが、この方法では、Python のインストールや、ユーザーが既に Python をインストールしているかどうか、またはアンインストールするかどうかについて心配する必要はありません。アプリにバンドルする必要がある Python のバージョン。
注意すべきことの 1 つは、Python インストーラー自体のサイズが心配な場合は、依存関係の前で約 10 MB ですが、その多くはアプリを使用するエンド ユーザーには関係ないということです。あるような Python ランタイム環境インストーラーはありません。 Python を実行するために必要なものをインストールするだけの Java ランタイム環境インストーラーを使用すると、常に開発ツールを入手できます。
これが少し役立つことを願っています。
ナイスレスポンスマイケル。
しかし、py2exe はより初心者のユーザーを怖がらせる可能性があります。彼らにとっては、pyinstaller 1.5.1 を使用する方が簡単かもしれません (2.x が利用可能ですが、単純で強力なライブラリ フックがありますが [必要])。
pyinstaller が必要とするのは、Configured (Configure.py で自動) と、実行可能ファイルのメイン ソース ファイルだけで、残りはすべて処理されます。
pyinstaller をダウンロードしたら、そのパスを環境変数として設定し、バッチまたは cmd で 3 行ほどで実行可能ファイルを作成できるようになりました。
私は通常、いくつかのラベルを簡単に変更し、選択したディレクトリにスクリプトをドロップして、ワンクリックで実行可能ファイルを作成できるようにするバッチ スクリプトを作成しています。
スクリプトは次のようになります。
python %pyinstaller%/Configure.py
python %pyinstaller%/Makespec.py -F --icon=C:\Path\To\MyIcon.ico -n ExecutableName
C:\Path\To\Source\Main.py
python %pyinstaller%/Build.py ExecutableName.spec
また、スペック ファイルが利用可能になる前に Build.py が呼び出された場合は、疑似一時停止を含める必要がある場合があります。私はこの行を入れます:
ping -n 2 127.0.0.1>nul
各 %pyinstaller% コマンドの間に、準備が整う前に何も呼び出されないようにするためと、「一時停止」を続行するにはキー入力が必要なためです。「-n 2」は、続行する前にスクリプトを 1 秒間一時停止します。
スクリプトを実行すると、2 つのディレクトリ (Build と dist) が作成されます。スタンドアロンの実行可能ファイルは、「dist」フォルダーにあります。
私はこれをすべてのアプリケーションで使用してきましたが、PyMC を使用する場合を除いて、問題が発生したことはありません。これには、モジュールの 1 つにガベージ ライブラリのインポート呼び出しがあり、次のインポートに続くすべてのモジュール ファインダーが停止し、py2exe でさえ機能しませんでした。このような問題が発生した場合は、モジュールのソース コードを調べてゴミを修正する必要があります。* ほとんどのライブラリでは、この可能性は非常に低いです *
-- 編集 (2分後) --
投稿後に質問を読み直したところ、実際のインストーラーが必要なようです。
pyinstaller を使用して Python を実行可能にすることをお勧めします。作成された EXE にはメイン スクリプトにすべてのインポートが含まれるため、Python、PIL、カスタム モジュールの物理インストーラーをメイン インストーラー プログラムに含める必要はありません (スクリプトで参照されている限り)。楽しい部分は次のとおりです。
InnoSetup をインストールする必要があります。これは、Windows 用のプロフェッショナルな外観のインストーラーを開発するために使用される無料のオープン ソース プログラムです。メイン インストーラーを実行するには、スクリプトが必要です。これには構文を読む必要があるかもしれませんが、要点を説明できるように最善を尽くします。
スクリプトの構文は Pascal に似ており、通常、このスクリプトにはインストーラーで使用される 6 つのセクションがあります。
[セットアップ] 、[ファイル] 、[タスク] 、[アイコン] 、[実行] 、[コード]
[Setup] セクションには、インストーラーに関するすべての基本情報が含まれています。
[Setup]
AppId={{123LKJESA-1441-FAKE-IDNO-THISWONTWRK}
OutputDir=.
OutputBaseFilename=MyInstaller
AppName=ExecutableName
AppVersion=1.0
AppPublisher=YourCompany
AppPublisherURL=http://www.URL.com
AppSupportURL=http://www.URL.com
AppUpdatesURL=http://www.URL.com
DefaultGroupName=A_GroupName
LicenseFile=C:\Path\To\Your\License.txt
DefaultDirName={pf}\MainDirName
WizardImageBackColor=$00001a
SetupIconFile=C:\Path\To\Icon.ico
Compression=lzma
SolidCompression=yes
- 注: AppID はアプリケーションに固有のものです。新しいバージョンを作成する場合、この ID は同じでなければなりません。そうしないと、インストーラーが別の exe をインストールし、アンインストーラーが壊れる可能性が高くなります。
また、DefaultDirName には、Program Files を表すキー {pf} があります。そのような利用可能な他のロケーションキーがあり、Web サイトのドキュメントで見つけることができます。
[ファイル] - このセクションには、インストーラーに必要なすべてのファイルが含まれており、かなり標準的な形式に従っています。Source: と Destination (DestDir:) が必要です。その他の便利なオプションは、再インストール時に何をすべきかをインストーラに指示する CopyMode と、このファイルをどうするかについてさらに多くのオプションを提供する Flags: です。
例:
[Files]
Source: C:\Path\to\my\created\python\executable.exe; DestDir: {app}; CopyMode: alwaysoverwrite;
Source: C:\Path\to\directory\of\files; DestDir: {localapp}; CopyMode: alwaysoverwrite; Flags: recursesubdirs;
- ここで最初のソース destdir にある {app} キーは、アプリケーションの宛先への参照です。
- {localapp} キーは、指定されたディレクトリ内のすべてのファイルをユーザーのローカル アプリ データ ファイルに保存し、Python アプリケーションから参照できます。
[タスク] は、このアプリケーションの特定のタスクを選択するオプションをユーザーに提供します。以下の例では、デスクトップ アイコンを表示するかどうかをユーザーに選択してもらいます。
[Tasks]
Name: "desktopicon" Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}";
[Icons] セクションは一目瞭然で、オンライン ドキュメントで調べることができます (この投稿も長くなりすぎています)。
最後の [Code] セクション
インストーラーはデフォルト モードで実行されるため、このセクションは完全に必要というわけではありません。ただし、より複雑なインストーラーを作成する場合は、ここで行います。これは普通のプログラマーが扱えるセクションですが、Pascal のバックグラウンドがあれば非常に役に立ちます。ここでは、カスタム ウィンドウを作成し、AfterInstall および BeforeInstall チェックをセットアップできます (特定のプログラムが既にインストールされている場合はレジストリをチェックし、そうでない場合は続行する前に別のインストーラーを起動するなど)。
-- 編集 2 --
あわてて [Run] セクションのことを忘れていました。[Run] セクションは、インストール直後にアプリケーションを実行するオプションをユーザーに提供します。ユーザーがプログラムを実行するかどうかを選択できるように、最初はチェックされていない最後のページにチェックボックスを表示する例を次に示します。
[Run]
Filename: "{app}\ExecutableName.exe"; Flags: nowait postinstall unchecked
*要約: 優れたアプリケーションとインストーラーでは、ユーザーが python と使用される個別のライブラリーをインストールする必要はありません。py2exe または pyinstaller を使用すると、スタンドアロンの実行可能ファイルが作成されるため、エンド ユーザーのマシンにインストールする必要はありません。InnoSetup を使用すると、インストーラーを作成し、その実行可能ファイル (およびその他の Python 以外の重要なソース) を目的の場所に配置できるため、マシンの .pyc ファイルにあるときとまったく同じように実行できます。
** アプリケーションを展開する前に、アプリケーションとインストーラーを別のマシンでテストする (または仮想マシンを作成する) ことをお勧めします。例えば。Windows 7 の {localappdata} キーは「C:\Users\UserName\AppData\Local」を参照し、XP では「C:\Documents and Settings\UserName\Local」を参照します (頭のてっぺんから思い出そうとしていますなので間違っているかもしれません)。そのため、プログラムがファイルを保存するためにユーザーのローカル アプリケーション データにアクセスしている場合、os.environ['LOCALAPPDATA'] を使用して、XP でパス リンクが壊れる可能性が高くなります。XP では、InnoSetup キー {userappdata} は「C:\Documents and Settings\UserName\Application Data」を指します。これは、python os.environ マッピングが指す正しい方向にあります。「{userappdata}\Local」を使用すると、正しいパスが生成されます。ただし、Windows 7 では、{userappdata} は「C:\Users\UserName\AppData\Roaming」を指します。そのため、アプリケーションが Windows バージョンと下位互換性がある場合は、[コード] セクションにコードを少し設定して、正しいバージョンを特定し、使用するキーにブール フラグを設定する必要があります。
オンライン ドキュメントの URL は次のとおりです。
http://www.jrsoftware.org/ishelp/
[Files] セクションに含めるすべてのファイルがスタンドアロン インストーラーにパッケージ化され、指定した場所に表示されるため、これは強力なツールであるため、あなた (または他の人) がこれを便利だと思うことを願っています。これは少し長くなるかもしれませんが、実行可能ファイルを作成してインストーラーでパッケージ化するための良いスタートを切ることができるはずです。
幸運を!