2010-12-21 65 views
1

我設計了一個使用wxPython的GUI應用程序,它與位於同一文件夾中的本地數據庫(Mongodb)進行通信。我的主應用程序有數據庫守護進程的相對路徑,每次GUI啓動時都會啓動它。py2app更改嵌入式Mongodb的位置

這是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) 

每一件事情正常工作從終端。但是,當我使用py2app在Mac OS(OS v10.6.5,Python v2.7)上創建我的程序的獨立版本時,我能夠午餐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離開我的應用程序結構是否完整?

謝謝。

回答

1

當啓動時,Py2app將當前工作目錄更改爲應用程序包內的foo.app/Content/Resources文件夾。從上面顯示的代碼看來並不是這樣,但是如果你有任何依賴於CWD的路徑(包括相對路徑名),那麼你必須以某種方式處理。處理這個問題的一個常見方法是,將所需的其他內容複製到應用程序捆綁包中的該文件夾中,以便它真正成爲獨立的捆綁包,而不依賴於它在文件系統中的位置,並且希望也不依賴於它運行的機器。

+0

我在'main.py'的同一個文件夾中創建了一個數據庫文件夾的副本,並且它作爲一個包正常工作。謝謝羅賓。 – sa9 2010-12-26 23:15:19