py2app меняет расположение встроенного Mongodb

Я разработал приложение с графическим интерфейсом, используя 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 оставить структуру моего приложения нетронутой?

Спасибо.


person sa9    schedule 21.12.2010    source источник


Ответы (1)


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

person RobinDunn    schedule 23.12.2010
comment
Я сделал копию папки базы данных в той же папке, что и «main.py», и она отлично работала как пакет. Спасибо, Робин. - person sa9; 27.12.2010