Лучшее из двух миров: упаковка для игры в Python

В настоящее время я пытаюсь упаковать игру, созданную на python и pygame, и сталкиваюсь с некоторыми проблемами.

я использую py2exe чтобы упаковать и посмотрел некоторые вопросы здесь об этом, но я не мог найти отличное решение. Я хочу в конечном итоге с папкой, содержащей exe, что я могу сжать и поставить онлайн. Запуск setup.py работает нормально, за исключением того, что помещает все зависимости в library.zip, Это означает, что программа при запуске не работает.

Я обнаружил, что кто-то еще сталкивался с этой проблемой, и они прекратили использовать "skip archive = true" вариант решить это. И хотя, да, это тоже работает для меня, я надеялся, что найдется метод, который все же позволит программе без проблем работать, но не захламляет папку бесчисленными файлами.

Чтобы быть очень точным, проблема, с которой я сталкиваюсь с library.zip является:

ImportError: MemoryLoadLibrary failed loading pygame\mixer.pyd

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

Вот сценарий установки, который я сейчас использую (и он не работает):

from distutils.core import setup
import py2exe, sys, os

sys.argv.append('py2exe')

data_files = [('resources', ['resources/step.wav',
                    'resources/wind2.wav',
                    'resources/The Steppes.ogg',
                    'resources/warrior3-nosword-notassle.png',
                    'resources/warrior3-sword.png',
                    'resources/warrior2-blood1.png',
                    'resources/warrior2-blood2.png',
                    'resources/warrior2-blood3.png',
                    'resources/warrior2-blood4.png',
                    'resources/warrior3-up.png',
                    'resources/warrior3-kneel.png',
                    'resources/warrior3-kneel-nosword.png',
                    'resources/warrior2-blood2-kneel.png',
                    'resources/warrior2-blood3-kneel.png',
                    'resources/warrior2-blood4-kneel.png',
                    'resources/warrior3-death.png',
                    'resources/warrior3-offarm.png',
                    'resources/menu1.png',
                    'resources/plains3-top-nomount.png',
                    'resources/mountains.png',
                    'resources/plains5-bottom.png',
                    'resources/plains3-bottom.png',
                    'resources/cloud1.png',
                    'resources/warrior2-sword.png',
                    'resources/warrior2-hand.png',
                    'resources/blue-tassle1.png',
                    'resources/blue-tassle2.png',
                    'resources/blue-tassle3.png',
                    'resources/blue-tassle4.png'])]

setup(options = {'py2exe': {"bundle_files": 1}},
    data_files = data_files,
    console = [{'script': "steppes2.0.py"}],
    zipfile = None
    )

1 ответ

Этот код в вашем setup.py должен выполнить трюк для создания одного исполняемого файла (вам все равно придется раздавать DLL-библиотеки msvc отдельно)

from distutils.core import setup
import py2exe, sys, os

sys.argv.append('py2exe')

setup(
      options = {'py2exe': {'bundle_files': 1}},
      console = [{'script': "myscript.py"}],
      zipfile = None,
)
Другие вопросы по тегам