web-dev-qa-db-fra.com

Compiler Python 3.6 vers un exe autonome avec Nuitka sur Windows 10

Remarque:
Avant de marquer cette question comme double, veuillez vérifier que l'autre question répond au sujet de cette configuration:

  • Système d'exploitation: Windows 10, 64 bits
  • Version Python: 3.6 ou supérieure
  • Compilateur Python: Nuitka, version de développement 0.5.30rc5
  • Compilateur MSVC: Communauté Visual Studio 2017, vcvars64.bat


1. Comment je construis mon exe

Je vais d'abord expliquer comment je construis mon exécutable. Supposons que j'ai un dossier avec un simple script python que je veux construire:

enter image description here

Le buildscript.py ressemble à ça:

#####################################################
#               NUITKA BUILD SCRIPT                 #
#####################################################
# Author: Matic Kukovec
# Date: April 2018

import os
import platform


NUITKA = "C:/Python36/Scripts/nuitka3-script.py"  # Path where my nuitka3-script.py is
CWD = os.getcwd().replace("\\", "/")
MSVC = "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Auxiliary/Build/vcvars64.bat"
PYTHON_VERSION = "3.6"
PYTHON_EXE_PATH= "C:/Python36/python.exe"
NUMBER_OF_CORES_FOR_COMPILATION = 1 # 1 is the safest choice, but you can try more

# Generate command
command = '"{}" AMD64 &'.format(MSVC)
command += "{} ".format(PYTHON_EXE_PATH)
command += "{} ".format(NUITKA)
command += "--python-version={} ".format(PYTHON_VERSION)
command += "--output-dir={}/output ".format(CWD)
command += "--verbose "
command += "--jobs={} ".format(NUMBER_OF_CORES_FOR_COMPILATION)
command += "--show-scons "
# command += "--windows-disable-console "
# command += "--icon={}/myicon.ico ".format(CWD)
command += "--standalone "
# command += "--run "
command += "{}/cubeimporter.py ".format(CWD)
os.system(command)

print("END")


2. Résultat de la construction

Une fois la construction terminée, le dossier ressemble à ceci (voir l'image ci-dessous). Comme vous pouvez le voir, il existe de nombreux autres fichiers à côté de l'exécutable. Je vois .dll et .pyd des dossiers.

enter image description here


3. Résultat souhaité

J'aimerais pouvoir construire juste un exécutable autonome. Aucun fichier DLL ou autre n'est nécessaire. Lorsque je mets l'exécutable sur une clé USB et le colle dans un autre ordinateur (exécutant Windows 10, 64 bits), cela devrait simplement fonctionner. Même s'il n'y a pas Python installé sur cet ordinateur.

Est-ce possible avec Nuitka?
Si non, est-ce possible avec un autre compilateur Python?
Veuillez fournir toutes les étapes nécessaires, une par une :-)

9
K.Mulier

Plus simple que Nuitka pour un seul exécutable est par exemple PyInstaller: pyinstaller --onefile program.py (pour désactiver la fenêtre de console pour les applications GUI, ajoutez le -w option).

Pour créer un seul exécutable avec Nuitka, vous pouvez créer une archive SFX à partir des fichiers générés. Vous pouvez exécuter Nuitka avec le --standalone option qui génère un program_dist répertoire.

Créez ensuite un fichier de configuration SFX 7-Zip config.txt: ;!@Install@!UTF-8! GUIMode="2" ExecuteFile="%%T/program_dist/program.exe" ;!@InstallEnd@!

Obtenez ensuite le SFX 7-Zip à partir de https://github.com/chrislake/7zsfxmm (à partir des versions - 7zsd_extra_171_3901.7z) et déballez le 7zsd_All_x64.sfx fichier.

Emballez ensuite le program_dist avec 7-Zip (donc le dossier est inclus dans l'archive) pour programmer.7z. Ensuite, un SFX peut être créé avec copy /b 7zsd_All_x64.sfx + config.txt + program.7z single_executable.exe.

Sous Unix, vous pouvez également créer vous-même un SFX si vous créez une archive tar et l'ajoutez à un script Shell qui l'extrait et le décompresse, pour plus de détails, voir https://www.linuxjournal.com/node/1005818 .

6
Fabian Heller

Ouvrez la console et tapez:

nuitka --recurse-all program.py

Un fichier exe sera créé. Exécuter.

1
Zahu