2017-09-04 8 views
1

Je suis empaquetant un programme de Python 2.7 avec la dernière version de Pynsist.
J'ai créé un fichier installer.cfg en suivant l'exemple this.
Mais quand j'essaie d'emballer mon application en cours d'exécution[Python 2.7] Programme du paquet avec Pynsist

pynsist installer.cgf 

dans le dossier de l'application, il arrive avec

Copying Python installer to build directory 
PyLauncher MSI already in build directory. 
Copying packages into build directory... 
Traceback (most recent call last): 
    File "/usr/local/bin/pynsist", line 11, in <module> 
    sys.exit(main()) 
    File "/usr/local/lib/python2.7/dist-packages/nsist/__init__.py", line 540, in main 
    InstallerBuilder(**args).run(makensis=(not options.no_makensis)) 
    File "/usr/local/lib/python2.7/dist-packages/nsist/__init__.py", line 495, in run 
    self.prepare_packages() 
    File "/usr/local/lib/python2.7/dist-packages/nsist/__init__.py", line 381, in prepare_packages 
    py_version=self.py_version, exclude=self.exclude) 
    File "/usr/local/lib/python2.7/dist-packages/nsist/copymodules.py", line 224, in copy_modules 
    mc.copy(modname, target, exclude) 
    File "/usr/local/lib/python2.7/dist-packages/nsist/copymodules.py", line 195, in copy 
    check_package_for_ext_mods(path, self.py_version) 
    File "/usr/local/lib/python2.7/dist-packages/nsist/copymodules.py", line 41, in check_package_for_ext_mods 
    check_ext_mod(os.path.join(path, dirpath, filename), target_python) 
    File "/usr/local/lib/python2.7/dist-packages/nsist/copymodules.py", line 30, in check_ext_mod 
    raise ExtensionModuleMismatch(extensionmod_errmsg % ('Windows', path)) 
nsist.copymodules.ExtensionModuleMismatch: Found an extension module that will not be usable on Windows: 
/usr/lib/python2.7/dist-packages/pygame/rwobject.so 
Put Windows packages in pynsist_pkgs/ to avoid this. 

Le problème que je pense est avec Pygame.

Sur Google il n'y a rien à ce sujet, mais je ne peux pas utiliser d'autres programmes pour l'emballage (par exemple, py2exe, pyinstaller ecc ...).
Merci et désolé pour le mauvais anglais

+1

Si vous mettez pygame dans 'packages =', il essaie de le copier depuis votre ordinateur. Mais c'est pygame pour Linux, qui ne fonctionnera pas sur Windows. Vous pouvez contourner cela en utilisant une roue pour pygame - Pynsist choisira automatiquement une roue de Windows. Jetez un oeil à l'exemple de pygame ici: https://github.com/takluyver/pynsist/tree/master/examples/pygame –

+0

@ThomasK J'ai regardé l'exemple mais je n'ai pas très bien compris ... i avoir à télécharger la version windows de pygame et ....? Et pourquoi avec les autres modules je n'ai pas ce problème? –

+0

Si vous placez pygame dans le bit 'pypi_wheels =' du fichier de configuration (au lieu de 'packages ='), Pynsist se chargera de le télécharger pour vous. Vous ne devriez pas avoir besoin de faire quoi que ce soit vous-même. La plupart des paquets n'ont pas ce problème parce qu'ils contiennent seulement le code Python, qui est les mêmes fichiers sur toutes les plateformes. Pygame a des modules compilés, qui doivent être compilés pour la bonne plateforme. –

Répondre

1

Reposting comme une réponse, car il a travaillé:

Si vous mettez pygame dans packages=, il essaie de le copier depuis votre ordinateur. Mais sur votre ordinateur c'est pygame pour Linux, qui ne fonctionnera pas sous Windows. Si vous placez plutôt pygame dans le bit pypi_wheels= du fichier de configuration, Pynsist se chargera de télécharger une version Windows pour vous. Regardez le the pygame example dans le référentiel Pynsist.

La plupart des paquets n'ont pas ce problème car ils contiennent uniquement le code Python, qui est le même fichier sur toutes les plateformes. Pygame a des modules compilés, qui doivent être compilés pour la bonne plateforme.