2016-06-05 1 views
0

Ich teste eine EXE von pyinstaller. Im Projektordner gibt es einen Ordner mit dem Namen config, der eine JSON-Datei enthält, in der der Benutzer alle gewünschten Informationen über die GUI speichert. Tkinter- Aber nach dem Neustart dieser Anwendung und dem erneuten Öffnen der JSON-Datei wird sie angezeigt die ursprüngliche Datei.PyInstaller: Probleme beim Update einer JSON-Datei aus einer EXE-Programmdatei (-im nächsten Reluch, JSON-Datei wurde nicht aktualisiert)

Ich habe gelesen, um einen neuen Ordner in der Ausführungszeit zu erstellen, wo ich die Original-JSON-Datei. Aber ich bin nicht zufrieden mit dieser Lösung.

Hier ist die Projektstruktur:

Bitte jede Hilfe würde

aktualisieren geschätzt werden

/config 
     |----config.json 
/modules 
     |----admin 
     |----core 
     |----graphwo 
init.py 

Der Code ausführen gut, außer, dass ich will Benutzer ihre Informationen in der Config speichern. JSON-Datei mit anderen Worten, in der Ausführungszeit. Aber weil die PyInstaller ich verwendet habe, ist --onefile das ist nicht der config.json Datei

Update II zu aktualisieren permiting:

Auch ich habe diesen Code, die zur Ausführungszeit jeder Datei den aktuellen Pfad bekommt - Bilder, Daten und json Dateien- die Anwendungsanforderungen:

def getPathFileAtExecution(relative): 
    try: 
    base_path = sys._MEIPASS 
except Exception: 
    base_path = os.path.abspath(".") 
return os.path.join(base_path, relative) 

ich alle Schritte des Programms verfolgen, wenn es die json Datei zum Lesen aufrufen und schreiben. Nach dem Beenden und Neustarten werden jedoch alle zuvor vorgenommenen Änderungen nicht übernommen. Der Mai ist jetzt klarer?

+0

zeigen u'r Code verwenden PLS –

Antwort

0

Überprüfen Sie zuerst, ob Sie in einen richtigen Pfad zeigen. Einige Betriebssysteme reagieren bei einigen Systemvariablen und Funktionsaufrufen unterschiedlich.

import sys 
import os 
if getattr(sys,'frozen',False): 
    current_path = os.path.dirname(sys.executable) 
else: 
    current_path = os.path.dirname(os.path.realpath(__file__)) 

config_json_file_path = os.path.join(current_path, 'config', 'config.json') 
print config_json_file_path 
0
import os 
import sys 
if getattr(sys, 'frozen', False): 
    # we are running in a |PyInstaller| bundle 
    base_path = sys._MEIPASS 
    extDataDir = os.getcwd() 
    print base_path 
    print extDataDir 
else: 
    # we are running in a normal Python environment 
    base_path = os.getcwd() 
    extDataDir = os.getcwd() 

Die sys._MEIPASS Variable ist, wo Ihre App gebündelt Dateien ausgeführt werden, während Ihr Programm läuft. Dies ist anders als wo Ihre Anwendung lebt. Damit Ihr Programm diese nicht gebündelte .json-Datei findet und bearbeitet, habe ich os.getcwd() verwendet, um den Ordner zu erhalten, in dem Ihre Anwendung lebt.

Die os.getcwd() wird das aktuelle Arbeitsverzeichnis, das die ausführbare Datei in ist. Dann, wenn Ihre .json Datei in einem Ordner config und Ordner im aktuellen Arbeitsverzeichnis, wo Sie Ihre exe aus ausgeführt werden aufgerufen ist, Sie würden

ext_config = os.path.join(extDataDir, 'config', 'your.json')

Verwandte Themen