py2app меняет расположение встроенного Mongodb - PullRequest
1 голос
/ 21 декабря 2010

Я разработал приложение с графическим интерфейсом, используя wxPython, который взаимодействует с локальной базой данных (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), я могу запустить графический интерфейс, но не могу запустить базу данных. Кажется, 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 Ответ

1 голос
/ 23 декабря 2010

Py2app при запуске меняет текущий рабочий каталог на папку foo.app/Content/Resources в комплекте приложений. Похоже, это не так из приведенного выше кода, но если у вас есть какие-либо пути, зависящие от CWD (включая относительные имена путей), вам придется как-то с этим справиться. Один из распространенных способов справиться с этим - это также скопировать другие необходимые материалы в эту папку в комплекте приложений, так что тогда это будет действительно отдельный пакет, который не зависит от его расположения в файловой системе и, надеюсь, также не зависит от машина, на которой он работает.

...