Ich habe gearbeitet, um eine Python-ausführbare Datei für OSX El Capitan zu bekommen, und ich bekomme die ausführbare Datei mit Pyinstaller und cx_Freeze erstellt, kommt das Problem wann Ich starte die ausführbare Datei auf einem anderen Mac. Der Fehler, den ich erhalte, ist, dass ich die .db-Datei, die in meinem Hauptskript referenziert wird, nicht finden kann. Daher habe ich mir die Dokumentation für beide Programme angeschaut und sys.MEIPASS (Pyinstaller) und sys.executable (cx_Freeze) gefunden, um Datendateien einzuschließen die --onefile App. Dies ist der Code, den ich in meinem Haupt-Skript verwendet:Wie man Pyinstaller - cx_Freeze ausführbare sys.MEIPASS/sys.executable
def find_data_file(filename):
if getattr(sys, 'frozen', False):
# The application is frozen
datadir = os.path.dirname(sys._MEIPASS) #in cx_Freeze this is sys.executable
else:
# The application is not frozen
# Change this bit to match where you store your data files:
datadir = ospath.abspath(os.pardir)
return os.path.join(datadir, filename)
#This is how im using the "find_data_file" function in my code.
dbpath = find_data_file('PubData.db')
conn = lite.connect(dbpath)
ive es ein wenig in der else-Anweisung änderte das Layout meiner Projektverzeichnisse übereinstimmen, und es funktioniert völlig in Ordnung, wenn eine nicht gefrorene Anwendung ausgeführt wird. Wenn ich jedoch versuche, mit der gebauten ausführbaren Datei zu laufen, gibt es mir einen Fehler, weil ich die .db-Datei nicht finden konnte, was ich dachte, wenn ich auf sys.MEIPASS oder sys.executable referenziere.
Fehler:
Traceback (most recent call last):
File "interface/GUI.py", line 673, in <module>
File "interface/GUI.py", line 82, in __init__
File "interface/GUI.py", line 212, in getServerNames
sqlite3.OperationalError: no such table: servernames
Dies ist, wie meine Dateibaum aussieht:
PubData-master ##(Project Root Directory)
Interface ##(Directory)
GUI.py ##(Main Script, this is where i reference 'PubData.db')
GUI.speC##(Pyinstaller spec file)
PubData.db ## This is my database file, in the PubData-master Directory
Wenn jemand könnte mir sagen, was ich falsch mache, oder geben Sie mir eine Lösung, würde ich sehr dankbar sein !