コマンドラインプログラムのGUIフロントエンドであるクロスプラットフォームのPythonスクリプトを作成したいと思います。問題は、ターミナルを使用すると、コンピューターを高層ビルの上から投げ出すのと同じ効果があると考えているMacユーザーを何人か知っていることです。LinuxとWindowsでは、Pythonスクリプトを設定するのは簡単なので、ユーザーはアイコンをダブルクリックすると、余分なウィンドウを開かなくてもスクリプトが開始されます。OS-Xでこれを行う簡単な方法はありますか?ユーザーはOS-Xに付属しているものとは異なるPythonをインストールする必要がありますか?私は決定的な答えを見つけることができませんでした。
3 に答える
Platypusを見たいと思うかもしれません。スクリプトをラップするアプリを生成するためのフリーウェア アプリです。
そのようなことを行う別の方法は、Automator または AppleScript Editor を使用することです。どちらも、スクリプトを実行するだけのアプリケーションを作成できます。
アップデート:
Automator の場合: Automator を起動し、アプリケーション テンプレートを選択し、検索フィールドに「スクリプト」と入力し、[シェル スクリプトの実行] をダブルクリックし、シェル ポップアップ メニューを に切り替え、/usr/bin/python
Python スクリプトをテキスト フィールドに入力/貼り付けます。または、ポップ メニューをオンのままに/bin/bash
して、テキスト フィールドに外部スクリプトの呼び出しを記述します。アプリケーションとして保存します。
ヘルプ メニューからヘルプを表示することもできます。
AppleScript の場合、AppleScript エディターを起動し、スクリプトとして次のように入力します。
do shell script "/usr/bin/true"
/usr/bin/true
任意のスクリプトへのパスに置き換えます。アプリケーションとして保存します。
ここでも、[ヘルプ] メニューにヘルプがあります。
py2appはこれを aplomb で行います。Python スクリプトを作成し、必要な依存関係 (wx、Tkinter など) を使用すると、py2app によって最新の OS X 環境で実行されるスタンドアロン アプリ バンドルが作成されます。Python もバンドルされているため、(システムのデフォルトだけでなく) 任意の Python を使用できます。
欠点は、生成されたアプリが大きくなり、多くの依存関係がある場合は最大 50 MB になる可能性があることです (ただし、これはやや極端です)。
これを行うには、次の 2 つの方法があります。
- スクリプトをクリックします。
- command-i を押して、「情報を取得」ウィンドウを開きます。
- [開く] セクションを展開します (展開されていない場合)。
- ドロップダウン メニューから [Python ランチャー] を選択します。
- ダブルクリックしたときにすべての Python スクリプトを起動する場合は、[すべて変更] をクリックします。
- おそらくPython Launcherを開き、「ターミナルウィンドウで実行」のチェックを外してください。これはこのマシンでのみ機能するため、次のものより移植性が低くなります。なんで?ドキュメントタイプを開くためのデフォルトは、インストールされているものによって異なります (XCode および/または IDLE の両方が .py ファイルを開くことを引き継ぎます)。
方法 2:
- ファイルの最初の行であるInterpreter Directiveを検証します。を使用することをお勧めし
/usr/bin/env python3
ます。これにより、ユーザー パスにある最初の python3 インタープリターが実行されます。 chmod a+x <script_name>
ターミナルからスクリプトを実行可能にします。- 拡張子を .py から .command に変更します (これはターミナルによって開かれます)。
- 配布には zip または tar を使用して、権限が損なわれないようにします。このメソッドはターミナル ウィンドウを開きますが、Python ウィンドウを閉じるとターミナル ウィンドウも閉じます。
スクリプトに標準ライブラリ以外の依存関係がある場合は、.command
それらをインストールするための 2 つ目のファイルを提供する必要があります。これは物事をより複雑にするかもしれませんが、 を使用することで複雑さpip3 install --user <list of dependencies>
を最小限に抑えることができます。