background image

 

 

73 

 

Δημιουργία εκτελέσιμου αρχείου (EXE) 

Για να μπορέσει να γίνει εξαγωγή του αρχείου σε εκτελέσιμη μορφή exe  

δημιουργήθηκε  το  αρχείο  utils.py.  Σε  αυτό  το  αρχείο  περιλαμβάνεται  η  συνάρτηση 

resource_path(), η οποία διευκολύνει τη διαχείριση διαδρομών αρχείων. Η συνάρτηση ελέγχει 

αν η εφαρμογή τρέχει ως exe χρησιμοποιώντας το sys._MEIPASS, μια προσωρινή τοποθεσία 

που  χρησιμοποιείται  από  το  PyInstaller.  Σε  αυτήν  την  περίπτωση,  ορίζει  ως  base_path  τη 

διαδρομή του πακέτου. Εάν τρέχει ως κανονικό Python script, χρησιμοποιεί το τρέχον directory 

(os.path.abspath(".")) ως base_path

19

Αυτό εξασφαλίζει ότι οι διαδρομές των αρχείων, όπως 

εικόνες, ήχοι ή άλλα αρχεία (π.χ. py), λειτουργούν σωστά και στις δύο περιπτώσεις

20

 

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-

the-exe-file