1

同じフォルダーにあるローカル データベース (Mongodb) と通信する wxPython を使用して GUI アプリケーションを設計しました。私のメイン アプリケーションには、データベース デーモンへの相対パスがあり、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)

ターミナルからはすべて正常に動作します。ただし、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にアプリケーション構造をそのまま残すように強制する方法は?

ありがとう。

4

1 に答える 1

1

Py2app は、起動時に現在の作業ディレクトリをアプリ バンドル内の foo.app/Content/Resources フォルダーに変更します。上記のコードからはそうではないようですが、CWD に依存するパス (相対パス名を含む) がある場合は、何らかの方法で対処する必要があります。これに対処する一般的な方法の 1 つは、必要な他のものもアプリケーション バンドル内のそのフォルダーにコピーすることです。これにより、ファイル システム内の場所に依存せず、できればファイル システムにも依存しない真のスタンドアロン バンドルになります。実行中のマシン。

于 2010-12-23T19:28:21.807 に答える