Ich entwarf eine GUI-Anwendung mit WxPython, die mit einer lokalen Datenbank (Mongodb) in demselben Ordner kommunizieren. Meine Hauptanwendung hat den relativen Pfad zum Datenbank-Daemon, um sie jedes Mal zu starten, wenn die GUI gestartet wird.py2app ändert den Speicherort von eingebetteten Mongodb
Dies ist main.py:
import mongodb
class EVA(wx.App):
# wxPython GUI here
pass
if __name__ == "__main__":
myMongodb = mongodb.Mongodb()
myMongodb.start()
myMongodb.connect()
app = EVA(0)
app.MainLoop()
Dies ist das mongodb.py Modul:
from pymongo import Connection
import subprocess, os , signal
class Mongodb():
pid = 0
def start(self):
path = "/mongodb-osx-x86_64-1.6.5/bin/mongod"
data = "/data/db/"
cmd = path + " --dbpath " + data
MyCMD = subprocess.Popen([cmd],shell=True)
self.pid = MyCMD.pid
def connect(self):
try:
connection = Connection(host="localhost", port=27017)
db = connection['Example_db']
return db
except Exception as inst:
print "Database connection error: " , inst
def stop(self):
os.kill(self.pid,signal.SIGTERM)
Jedes Ding funktioniert vom Terminal in Ordnung. Wenn ich jedoch mit py2app eine Standalone-Version meines Programms unter Mac OS (OS v10.6.5, Python v2.7) erstellen konnte, kann ich die GUI zwar zu Mittag essen, aber die Datenbank nicht starten. Es scheint, dass py2app den Speicherort des ausführbaren Mongodb-Ordners geändert und meinen Code zerstört hat.
Ich verwende die folgenden Parameter mit py2app:
$ py2applet --make-setup main.py
$ rm -rf build dist
$ python setup.py py2app --iconfile /icons/main_icon.icns -r /mongodb-osx-x86_64-1.6.5
Wie py2app zu zwingen, meine Anwendungsstruktur intakt zu lassen?
Danke.
Ich habe eine Kopie des Datenbankordners im selben Ordner von "main.py" erstellt und es funktionierte gut als ein Bündel. Danke Robin. – sa9