py2app改变嵌入Mongodb的位置

发布于 10-09 05:54 字数 1448 浏览 9 评论 0原文

我使用 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)

在终端上一切正常。但是,当我使用 py2app 在 Mac 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 保持我的应用程序结构完整?

谢谢。

I designed a GUI application using wxPython that communicate with a local database (Mongodb) located in the same folder. My main application has the relative path to the database daemon to start it every time the GUI is lunched.

This is the 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()

This is the mongodb.py module:

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)

Every thing works fine from the terminal. However, when I used py2app to make a standalone version of my program on Mac OS (OS v10.6.5, Python v2.7), I am able to lunch the GUI but can't start the database. It seems py2app changed the location of Mongodb executable folder and broke my code.

I use the following parameters with 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

How to force py2app to leave my application structure intact?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

拔了角的鹿2024-10-16 05:54:10

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

Py2app changes the current working directory to the foo.app/Content/Resources folder within the app bundle when it starts up. It doesn't seem to be the case from the code you show above, but if you have any paths that are dependent on the CWD (including relative pathnames) then you'll have to deal with that somehow. One common way to deal with it is to also copy the other stuff you need into that folder within the application bundle, so it will then truly be a standalone bundle that is not dependent on its location in the filesystem and hopefully also not dependent on the machine it is running upon.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文