В OSX измените имя приложения с «python» - PullRequest
1 голос
/ 19 февраля 2011

Я работаю над Orange , и я получаю эту гниду, где в OSX (10.6.5) имя менубара называется «Python» вместо оранжевого.Это приложение на python / qt.Что мне нужно изменить?

Чтобы уточнить:

  • qt приложение, не cli, не работает в терминале.

мой info.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDisplayName</key>
    <string>YOORANGE</string>
        <key>CFBundleExecutable</key>
        <string>Orange</string>
        <key>CFBundleIconFile</key>
        <string>orange.icns</string>
        <key>CFBundleIdentifier</key>
        <string>si.ailab.Orange</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <string>6.0</string>
        <key>CFBundleName</key>
        <string>Orange</string>
        <key>CFBundleGetInfoString</key>
        <string>Orange, component-based data mining software</string>
        <key>CFBundlePackageType</key>
        <string>APPL</string>
        <key>CFBundleSignature</key>
        <string>Orng</string>
        <key>CFBundleShortVersionString</key>
        <string>1.0.0</string>
        <key>CFBundleVersion</key>
        <string>1.0.0</string>
        <key>CFBundleDocumentTypes</key>
        <array>
                <dict>
                        <key>CFBundleTypeExtensions</key>
                        <array>
                                <string>ows</string>
                        </array>
                        <key>CFBundleTypeName</key>
                        <string>Orange Canvas Schema</string>
                        <key>CFBundleTypeOSTypes</key>
                        <array>
                                <string>OWSf</string>
                        </array>
                        <key>CFBundleTypeIconFile</key>
                        <string>schema.icns</string>
                        <key>CFBundleTypeRole</key>
                        <string>Viewer</string>
                        <key>LSIsAppleDefaultForType</key>
                        <true/>
                </dict>
        </array>
</dict>
</plist>

Вот скрипт запуска Orange, модифицированный, чтобы попытаться использовать символическую ссылку.Понятно, что что-то работает, работает:)

#!/bin/bash

BUNDLE_DIR=`dirname $0`/../
BUNDLE_DIR=`perl -MCwd=realpath -e 'print realpath($ARGV[0])' $BUNDLE_DIR`/
FRAMEWORKS_DIR="$BUNDLE_DIR"Frameworks/

CANVAS_FILE="$FRAMEWORKS_DIR"Python.framework/Versions/2.6/lib/python2.6/site-packages/orange/OrangeCanvas/orngCanvas.    pyw

cp "$FRAMEWORKS_DIR"Python.framework/Resources/Python.app/Contents/MacOS/{Python-32,AWESOME}
PYTHONEXECUTABLE="$FRAMEWORKS_DIR"Python.framework/Resources/Python.app/Contents/MacOS/AWESOME
PYTHONHOME="$FRAMEWORKS_DIR"Python.framework/Versions/2.6/

#DYLD_FRAMEWORK_PATH="$FRAMEWORKS_DIR"${DYLD_FRAMEWORK_PATH:+:$DYLD_FRAMEWORK_PATH}
DYLD_FRAMEWORK_PATH="$FRAMEWORKS_DIR":"$BUNDLE_DIR"Resources/Qt4/lib${DYLD_FRAMEWORK_PATH:+:$DYLD_FRAMEWORK_PATH}

export PYTHONEXECUTABLE
export PYTHONHOME

export DYLD_FRAMEWORK_PATH
export DYLD_LIBRARY_PATH="$BUNDLE_DIR"Resources/openbabel/lib/:"$BUNDLE_DIR"Resources/openbabel/lib/openbabel/2.2.3/:$    DYLD_LIBRARY_PATH

# LaunchServices passes the Carbon process identifier to the application with -psn paramter - we do not want it
if [[ "$1" == -psn* ]] ; then
 shift
fi

echo "$0"
echo "$PYTHONEXECUTABLE"
echo "$@"

exec -a "$0" "$PYTHONEXECUTABLE" "$CANVAS_FILE" "$@"

Ответы [ 4 ]

2 голосов
/ 19 февраля 2019

Я хотел бы предложить другое решение.Он использует Какао, чтобы установить имя приложения, не нужно возиться с символическими ссылками.Запустите его на раннем этапе в главном модуле, прежде чем использовать PyQt.

    if sys.platform.startswith('darwin'):
        # Set app name, if PyObjC is installed
        # Python 2 has PyObjC preinstalled
        # Python 3: pip3 install pyobjc-framework-Cocoa
        try:
            from Foundation import NSBundle
            bundle = NSBundle.mainBundle()
            if bundle:
                app_name = os.path.splitext(os.path.basename(sys.argv[0]))[0]
                app_info = bundle.localizedInfoDictionary() or bundle.infoDictionary()
                if app_info:
                    app_info['CFBundleName'] = app_name
        except ImportError:
            pass
1 голос
/ 19 февраля 2011

Это чит, но я верю, что это работает,

Создайте sym-ссылку на приложение python.

ln -s / opt / local / bin / python / opt / local / bin / orange

затем вызовите orange, а не python, чтобы запустить ваш скрипт

1 голос
/ 20 февраля 2011

Как оказалось, в Contents/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/Info.plist был добавлен более глубокий Info.plist, который вызывался.

1 голос
/ 19 февраля 2011

Короткий ответ - это не тривиально, потому что вы запускаете интерпретатор python, который является собственной программой с собственным заголовком по умолчанию.

Длинный ответ - интерпретатор Python при запуске запускает сценарий оболочки при наличии переменной окруженияPYTHONSTARTUP установлен.Вы можете установить заголовок окна следующим образом:

  1. установить переменную окружения PYTHONSTARTUP с именем сценария оболочки, который будет выполняться при запуске (http://docs.python.org/library/idle.html#startup)
  2. в этом сценарии оболочки, запустить урегулирование[title]

Чтобы получить заголовок, который меняется каждый раз, когда перед запуском вам нужно будет выполнить некоторые дополнительные действия с переменными среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...