Лучшее из двух миров: упаковка для игры в Python - PullRequest
3 голосов
/ 21 марта 2012

В настоящее время я пытаюсь упаковать игру, созданную на 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 Ответ

1 голос
/ 21 марта 2012

Этот код в вашем 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,
)
...