1

我使用 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 保持我的应用程序结构完好无损?

谢谢。

4

1 回答 1

1

Py2app 启动时将当前工作目录更改为应用程序包中的 foo.app/Content/Resources 文件夹。从上面显示的代码来看,情况似乎并非如此,但如果您有任何依赖于 CWD 的路径(包括相对路径名),那么您将不得不以某种方式处理它。处理它的一种常见方法是将您需要的其他内容复制到应用程序包中的该文件夹中,因此它将真正成为一个独立的包,不依赖于其在文件系统中的位置,并且希望也不依赖于它正在运行的机器。

于 2010-12-23T19:28:21.807 回答