4

wxPythonアプリ用の純粋なPythonアプリケーションバンドルを作成しようとしています。Appleドキュメントで説明されているファイルやInfo.plistファイルなどを使用して.appディレクトリを作成しました。「通常の」アプリとこのバンドルの唯一の違いは、エントリポイント(CFBundleExecutable)が次のスクリプトで始まることです。ライン:

#!/usr/bin/env python2.5

Info.plistでCFBundleNameを設定しましたが(実際にはpy2appの結果をコピーしました)、OSXメニューバーのアプリケーション名が「Python」のままであることを除いて、すべて正常に動作します。完全なInfo.plistはここで見ることができます

どうすればこれを変更できますか?メニューバーの名前はCFBundleNameによってのみ決定されることをどこでも読んだことがあります。Pythonインタープリターが実行時にこれを変更できるのはどうしてですか?

注:以前はpy2appを使用していましたが、結果が大きすぎて(現在の100KBではなく> 50 MB)、LeopardとSnow Leopardの間で移植性さえありませんでした...したがって、純粋なものを作成する方がはるかに簡単なようです- py2appの出力を変換するよりも「手動で」Pythonアプリバンドル。

4

3 に答える 3

3

次のように、呼び出さLSHasLocalizedDisplayNameれたキーをに変更します。Info.plisttrue

<key>LSHasLocalizedDisplayName</key>
<true/>

次に、実行可能バンドルにファイルを作成します

foo.app/Contents/Resources/English.lproj/InfoPlist.strings

行があります

CFBundleName="name in the menu bar";
CFBundleDisplayName="name in the Finder";
于 2010-05-28T23:27:09.933 に答える
3

Python開発者ツールに付属する「BuildApplet.app」は、実際には純粋なPythonアプリバンドルです。次のことを行います。

  • PythonインタープリターがMacOS/ディレクトリに配置(またはリンク)されます
  • 実行可能スクリプト( )は、いくつかの環境変数を設定し、このインタープリターFoo.app/Contents/MacOS/Fooを呼び出します。os.execve()

実行可能スクリプトは次のようになります(プログラムのエントリポイントはにあると想定されていますResources/main.py)。

#!/System/Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python
import sys, os
execdir = os.path.dirname(sys.argv[0])
executable = os.path.join(execdir, "Python")
resdir = os.path.join(os.path.dirname(execdir), "Resources")
libdir = os.path.join(os.path.dirname(execdir), "Frameworks")
mainprogram = os.path.join(resdir, "main.py")

sys.argv.insert(1, mainprogram)
pypath = os.getenv("PYTHONPATH", "")
if pypath:
    pypath = ":" + pypath
os.environ["PYTHONPATH"] = resdir + pypath
os.environ["PYTHONEXECUTABLE"] = executable
os.environ["DYLD_LIBRARY_PATH"] = libdir
os.environ["DYLD_FRAMEWORK_PATH"] = libdir
os.execve(executable, sys.argv, os.environ)
于 2010-06-01T22:27:57.530 に答える
1

実際、Python実行可能ファイルへのソフトリンクを作成し、実行可能ファイル自体ではなくそれを使用すると(MyApp.app/Contents/MacOs/-script-内)、すべてが正しく機能しているように見えます。代わりに、個人的に「#!/ bin / sh」スクリプトを使用し、「exec」コマンドを使用します。(私はまだwx.App.SetAppName(MyAppName)を使用する必要があるかもしれません。)例:

#! /bin/sh

export PYTHONPATH=/Applications/MyApp.app/Contents/Resources/[myPythonCode]
export DYLD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/2.6/lib
exec "/Applications/MyApp.app/Contents/MacOS/[SoftLinkToPythonExe]" "/Applications/MyApp.app/Contents/Resources/myAppMain.py"
于 2010-11-03T20:13:55.990 に答える