pygame py2app Библиотека не загружена: @ loader_path / .dylibs / libSDL-1.2.0.dylib - PullRequest
0 голосов
/ 05 мая 2020

Я бы не стал называть себя программистом и не знаком с Ma c и Linux, поэтому любые ссылки или указатели на дополнительную информацию мне очень помогут. Я начал с самой простой c pygame, которую я мог найти в Google (от https://realpython.com/pygame-a-primer/). Test.py и test.app работают на моей виртуальной машине, но не на чьих-либо реальных компьютерах Mac.


файл test.py

import pygame

    pygame.init()
    screen = pygame.display.set_mode((400, 300))
    done = False

    while not done:
            for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                            done = True

            pygame.display.flip()

файл setup.py

from setuptools import setup

APP = ['test.py']
DATA_FILES = []
OPTIONS = {}

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

команда для создания test.app

$ python3 setup.py py2app


Test.app отлично работает на виртуальной машине , но всякий раз, когда test.app запускается на реальном Ma c (проверено 2, один работал на Catalina ver ???), появляется следующее сообщение об ошибке:


Traceback (most recent call last):
  File "/Applications/test.app/Contents/Resources/__boot__.py", line 101, in <module>
    _run()
  File "/Applications/test.app/Contents/Resources/__boot__.py", line 84, in _run
    exec(compile(source, path, "exec"), globals(), globals())
  File "/Applications/test.app/Contents/Resources/test.py", line 1, in <module>
    import pygame
  File "pygame/__init__.pyc", line 120, in <module>
  File "pygame/base.pyc", line 14, in <module>
  File "pygame/base.pyc", line 10, in __load
  File "imp.pyc", line 343, in load_dynamic
ImportError: dlopen(/Applications/test.app/Contents/Resources/lib/python3.7/lib-dynload/pygame/base.so, 2): Library not loaded: @loader_path/.dylibs/libSDL-1.2.0.dylib
  Referenced from: /Applications/test.app/Contents/Resources/lib/python3.7/lib-dynload/pygame/base.so
  Reason: image not found
2020-05-02 11:27:50.309 test[931:15836] test Error

----------------------------
Working environment: VirtualBox 6.1, macOS Sierra (Version 10.12) with the following:

$ pip list

Package     Version
----------- ----------
altgraph    0.17
certifi     2020.4.5.1
macholib    1.14
modulegraph 0.18
pip         20.1
py2app      0.21
pygame      1.9.6
setuptools  39.0.1
wheel       0.34.2

$ brew list --versions

freetype 2.10.1
gdbm 1.18.1
jpeg 9d
libmikmod 3.3.11.1
libogg 1.3.4
libpng 1.6.37
libtiff 4.1.0
libvorbis 1.3.6
openssl@1.1 1.1.1g
pkg-config 0.29.2_3
python 3.7.7
readline 8.0.4
sdl 1.2.15_1
sdl2 2.0.12_1
sdl_image 1.2.12_7
sdl_mixer 1.2.12_3
sdl_ttf 2.0.11_1
sqlite 3.31.1
webp 1.1.0
xz 5.2.5

Любые идеи или указатели будут буду очень признателен. Фактическая программа представляет собой карточную игру OhHell, которая поддерживает клиентов Windows (через pyinstaller), но я также пытаюсь поддерживать клиента Ma c, чтобы играть с моими друзьями на Ma c. Подобно test.py и test.app (ohhell.py и ohhell.app) запускается на виртуальной машине Ma c, но такая же проблема / ошибка возникает с настоящими Mac. Я только что включил простейший фрагмент кода, который мне удалось найти в Google, который воспроизводит точное сообщение об ошибке.

-john

1 Ответ

0 голосов
/ 21 мая 2020

Обходное решение: Связывание с динамической c библиотекой на Ma c с полным путем и Какой путь разрешает @loader_path? . Использование '$ install_name_tool -change "@ loader_path / .dylibs / libSDL-1.2.0.dylib" "/Applications/test.app/Contents/Frameworks/libSDL-1.2.0.dylib" base.so "разрешило библиотеку не загружено: loader_path / .dylibs / libSDL-1.2.0.dylib ошибки. Я предполагаю, что это жестко кодирует путь, но с моими друзьями можно сказать им, чтобы они убедились, что он находится в папке / Applications.

Однако возникла вторичная проблема: pygame.error: File is not a Windows Файл BMP '. Я использовал py2app, поэтому потоки удаления и переустановки pygame не казались приемлемым решением (pygame uncesary w / py2app), поэтому переключение изображений на несжатое растровое изображение (256 цветов) сработало.

Для тех, кому интересно, я попробовал Pyinstaller для Ma c, но это вызвало целый ряд новых проблем.

...