我使用 wxPython 设计了一个 GUI 应用程序,它与位于同一文件夹中的本地数据库 (Mongodb) 进行通信。我的主应用程序具有数据库守护程序的相对路径,可以在每次 GUI 启动时启动它。
这是 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()
这是 mongodb.py 模块:
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)
终端上的每件事都可以正常工作。但是,当我在 Mac OS(OS v10.6.5,Python v2.7)上使用 py2app 制作我的程序的独立版本时,我可以使用 GUI,但无法启动数据库。py2app 似乎更改了 Mongodb 可执行文件夹的位置并破坏了我的代码。
我在 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
如何强制 py2app 保持我的应用程序结构完好无损?
谢谢。