web-dev-qa-db-fra.com

Compilation croisée d'un script Python sous Linux dans un exécutable Windows

J'ai un script Python que je voudrais compiler dans un exécutable Windows. Maintenant, py2exe fonctionne bien sous Windows, mais j'aimerais pouvoir l'exécuter depuis Linux. Je fais avoir Windows sur ma machine de développement, mais Linux est ma principale plate-forme de développement et j'en ai assez de redémarrer Windows juste pour créer le .exe. Je ne veux pas non plus acheter une deuxième licence Windows pour fonctionner sur une machine virtuelle telle que VirtualBox. Des idées?

PS: je sais que py2exe ne compile pas exactement le fichier python autant que le package de votre script avec l'interpréteur Python. Mais de toute façon, le résultat est que vous ne ' t besoin de Python installé pour exécuter le script.

49
Chinmay Kanchi

Avez-vous regardé PyInstaller ?

Il semble que les versions via 1.4 prennent en charge la compilation croisée (le support a été supprimé dans 1.5+). Voir cette réponse pour savoir comment le faire avec PyInstaller 1.5+ sous Wine.

http://www.pyinstaller.org/browser/tags/1.4/doc/CHANGES.txt dit:

Ajout de la prise en charge de la compilation croisée: PyInstaller est désormais capable de créer des exécutables Windows lors de l'exécution sous Linux. Voir la documentation pour plus de détails.

Je ne l'ai pas essayé moi-même.

J'espère que ça aide

17
luc

Comme mentionné par d'autres répondeurs, la fonction de compilation croisée est supprimée de PyInstaller puisque 1.5. Ici, montrez comment empaqueter un exécutable Windows à partir de Python en utilisant PyInstaller sous wine .

Étape 1: installer Wine et Python

Sudo apt-get install wine
wine msiexec /i python-2.7.10.msi /L*v log.txt

PS: plus récent Python incluent déjà pip (est utilisé pour installer pyinstaller). Téléchargez Python package d'installation à partir de - ici (par exemple, python-2.7.10.msi)

Étape 2: installer PyInstaller sur Wine

$ cd ~/.wine/drive_c/Python27
$ wine python.exe Scripts/pip.exe install pyinstaller

Successfully installed pyinstaller-3.1.1 pypiwin32-219

Étape 3: Package Python

Package Python (par exemple, HelloWorld.py) avec pyinstaller.

$ wine ~/.wine/drive_c/Python27/Scripts/pyinstaller.exe --onefile HelloWorld.py

# filename: HelloWorld.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

print('Hello World!')

Le fichier exécutable Windows se trouve dans dist/.

$ wine dist/HelloWorld.exe 
Hello World!
fixme:msvcrt:__clean_type_info_names_internal (0x1e24e5b8) stub

Reportez-vous à ici pour la description détaillée.

28
SparkAndShine

Vous pouvez exécuter Windows dans VirtualBox afin d'exécuter py2exe. VBox offre un puissant client en ligne de commande pour automatiser les tâches, c'est donc quelque chose que vous pourriez probablement intégrer facilement à votre processus de développement.

4
Adam Crossland

J'ai testé py2exe à l'intérieur de wine, et il fonctionne. Vous aurez besoin d'installer python dans wine pour que cela fonctionne, ou si vous utilisez uniquement la bibliothèque standard, vous pouvez regrouper py2exe avec py2exe à partir de la machine Windows, puis l'utiliser dans wine. Juste gardez à l'esprit que vous avez besoin de la même version des bibliothèques ms visual C dans wine que celles utilisées pour compiler python ou les choses ne fonctionneront pas correctement.

3
Perkins