73
Δημιουργία εκτελέσιμου αρχείου (EXE)
Για να μπορέσει να γίνει εξαγωγή του αρχείου σε εκτελέσιμη μορφή exe
δημιουργήθηκε το αρχείο utils.py. Σε αυτό το αρχείο περιλαμβάνεται η συνάρτηση
resource_path(), η οποία διευκολύνει τη διαχείριση διαδρομών αρχείων. Η συνάρτηση ελέγχει
αν η εφαρμογή τρέχει ως exe χρησιμοποιώντας το sys._MEIPASS, μια προσωρινή τοποθεσία
που χρησιμοποιείται από το PyInstaller. Σε αυτήν την περίπτωση, ορίζει ως base_path τη
διαδρομή του πακέτου. Εάν τρέχει ως κανονικό Python script, χρησιμοποιεί το τρέχον directory
(os.path.abspath(".")) ως base_path
. Αυτό εξασφαλίζει ότι οι διαδρομές των αρχείων, όπως
εικόνες, ήχοι ή άλλα αρχεία (π.χ. py), λειτουργούν σωστά και στις δύο περιπτώσεις
def resource_path(relative_path):
try:
base_path = sys._MEIPASS #when running as an exe
except Exception:
#when running as a Python script
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
Έτσι όλα τα αρχεία φορτώνονται μέσα από τη συνάρτηση αυτή π.χ.
background_music=resource_path('sounds/background_music.mp3')
enemy_image_path_1 = resource_path('sprites/enemy1.png')
subprocess.Popen(["python", resource_path("api.py")], shell=True)
Για να ολοκληρωθεί η διαδικασία της μετατροπής όλης της εφαρμογής του παιχνιδιού σε
εκτελέσιμο αρχείο exe δόθηκαν οι παρακάτω εντολές στο terminal του Visual Studio Code.
1)-m pip install requests
2)-m pip install pyinstaller
3)-m pip install -U pip setuptools
4)pyinstaller --onefile --name "A Quest Of Knowledge" --add-data "sprites;sprites" --add-data
"sounds;sounds"--add-data "db_to_text.py;." --add-data "level.py;." --add-data "adduser.py;." -
-add-data "db.py;." --add-data "db_utils.py;." --add-data "utils.py;." --add-data "api.py;." -
-add-data "chat.py;." menu.py
Η τελευταία εντολή αποτελεί ουσιαστικά την τελική εντολή που δημιουργεί ένα εκτελέσιμο
αρχείο με το όνομα "A Quest Of Knowledge"
. Το --onefile διασφαλίζει ότι όλα
συμπεριλαμβάνονται σε ένα μόνο αρχείο exe. Στην περίπτωση που δεν είναι επιθυμητή η
εμφάνιση του παράθυρου κονσόλας, πρέπει να προστεθεί το flag --noconsole.
pyinstaller --onefile --name "A Quest Of Knowledge" --noconsole --add-data "sprites;sprites" -
-add-data "sounds;sounds" --add-data "db_to_text.py;." --add-data "level.py;." --add-data
"adduser.py;." --add-data "db.py;." --add-data "db_utils.py;." --add-data "utils.py;." --add-
data "api.py;." --add-data "chat.py;." menu.py
19
https://www.enablegeek.com/tutorial/python-remove-extension-from-filename/
20
https://stackoverflow.com/questions/31836104/pyinstaller-and-onefile-how-to-include-an-image-in-