Встроенное приложение py2app отображает «ОШИБКА: pygame.macosx import FAILED» на других компьютерах - PullRequest
4 голосов
/ 05 марта 2011

Попытка собрать приложение на Mac с помощью py2app. На моем компьютере все работает нормально, но при перемещении приложения на другое происходит сбой, и консоль отображает эту ошибку.

ERROR: pygame.macosx import FAILED

У кого-нибудь есть решение этой проблемы?

Ответы [ 2 ]

13 голосов
/ 06 марта 2011

Нашел проблему и решение через много часов. Оказывается, другие люди сталкивались с подобными проблемами, и их статьи были весьма полезны:

http://b.atcg.us/blog/2010/04/13/py2app-hell-the-first.html

http://www.vijayp.ca/blog/?p=62

В случае, если кто-то столкнулся с проблемой, эта конкретная проблема была вызвана тем, что среда Python не была встроена в приложение. Вы можете подтвердить это, щелкнув правой кнопкой мыши свое приложение, чтобы просмотреть содержимое пакета, а затем перейти к Contents / Frameworks /. Если Python.framework не существует, он должен быть.

Обязательно загрузите Python - Моей первой проблемой была зависимость от сборки Apple в пакете Python. Не используйте это. Вам необходимо установить собственную версию Python. Перейдите на http://www.python.org/download/releases/,, найдите версию (я придерживался версии 2.6), загрузите gzip (не пакет mac) и установите со следующим, если вы используете Snow Leopard:

./configure --enable-framework MACOSX_DEPLOYMENT_TARGET=10.6 --with-universal-archs=intel --enable-universalsdk=/
make
sudo make install

Настройка путей, установка пакетов - Отсюда вам необходимо настроить пути, чтобы убедиться, что вы используете установленную пользователем версию. Отсюда я переустановил следующие пакеты - это оказалось кошмаром зависимости, поэтому я включаю и номера версий:

  • py2app 0.5.2
  • махолиб 1,3
  • modulegraph .8.0

Если эти пакеты действительно сработали, вы сможете создать и запустить приложение прямо сейчас. К сожалению, нет. Я немного углублюсь в ошибки и мои взломанные решения, но в файле сборки есть некоторые настройки, которые нужно сделать в первую очередь.

Сначала файл setup.py должен выглядеть примерно так:

setup.py

from setuptools import setup

APP = ['Game.py']
DATA_FILES = ['data']

OPTIONS = {
    "argv_emulation": False,
    "compressed" : True,
    "optimize":2, 
    "iconfile":'data/game.icns',        
}

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
)

тогда для большей безопасности я использую сценарий оболочки для вызова этого.

build.sh

## Remove previous builds.  Start with clean slate.
rm -rf build dist

## Force python into 32 bit mode.
export VERSIONER_PYTHON_PREFER_32_BIT=yes

## Force build with custom installed python
/Library/Frameworks/Python.framework/Versions/2.6/bin/python setup.py py2app

Запуск build.sh должен скомпилировать приложение. Если он не скомпилируется, у меня хорошие новости - это не твоя вина. Из-за сбоев в библиотеках вы можете столкнуться с некоторыми (или всеми) из следующих факторов:

Потенциальные проблемы В случае сбоя сценария сборки просканируйте трассировку на наличие следующих ключевых слов:

pygame не найден - основная проблема с путями в py2app. Добавить ...

sys.path.insert(0, os.path.join(os.getcwd(), 'lib', 'python2.6','lib-dynload')) ## Added to fix dynlib bug

после операторов импорта в boot_app.py в библиотеке py2app.

pythonNone - Это ошибка в пакете macho, из-за которой он не может определить номер версии вашей сборки python. Чтобы решить эту проблему, я добавил следующие строки в build_app.py в py2app.

## Add these two lines...
if not info["version"]:
  info["version"] = "2.6"
## Before this line. (line 941 in method copy_python_framework() at time of writing)
pydir = 'python%s'%(info['version'])

Нет такого файла или каталога ... Python.framework / [lib | include] - py2app просто ищет каталоги, которые находятся глубже в дереве файловой системы. Перейдите в каталог Python.framework и вставьте ссылку на место ...

cd /Library/Frameworks/Python.framework
sudo ln -s Versions/Current/include/ include
sudo ln -s Versions/Current/lib lib

Это должно сделать это! - Эти шаги создали скомпилированное приложение, которое работало на других машинах Intel.

2 голосов
/ 17 июля 2011

Спасибо за публикацию того, что вы нашли!

У меня была похожая проблема. Я попробовал различные комбинации того, что вы предложили, и выделил для меня единственную проблему - ошибку в boot_app.py , которую вы указали выше.

Как только я добавил однострочное исправление в boot_app.py, который вы указали выше, все заработало, даже с использованием предустановленной сборки Apple python (версия 2.6.1).

Я должен отметить, что когда я говорю «все работает», я действительно имею в виду создание приложения py2app для реального распространения, то есть с использованием обычной команды:

python setup.py py2app

Режим "псевдоним". т.е.

python setup.py py2app -A

, который документация py2app предлагает для использования во время разработки, все еще не работает для меня (с тем же модулем не найдена ошибка). Но лучше фактическая сборка дистрибутива работает, чем вообще ничего! Еще раз спасибо.

...