setup.py 安装后访问文件

发布于 2024-09-04 16:10:52 字数 693 浏览 9 评论 0原文

我正在开发一个 python 应用程序,并且有一个关于对其进行编码的问题,以便在用户通过 setup.py install 或类似方法将其安装到他或她的计算机上后它仍然可以工作。

在我的一个文件中,我使用以下内容:

file = "TestParser/View/MainWindow.ui"
cwd = os.getcwd()
argv_path = os.path.dirname(sys.argv[0])
file_path = os.path.join(cwd, argv_path, file)

当我只知道相对于主脚本位置的路径时,为了获取 MainWindow.ui 的路径。无论我从哪里调用主脚本,这都有效。

问题是,用户在他或她的计算机上安装应用程序后,相对路径不同,因此这不起作用。我可以使用__file__,但根据this,py2exe没有 __file__

有实现这一目标的标准方法吗?或者更好的方法?

编辑:

我是否应该担心 py2exe 并只使用 __file__ ?我没有立即计划使用 py2exe,但我希望学习在这种情况下访问文件的正确方法。

I'm developing a python application and have a question regarding coding it so that it still works after an user has installed it on his or her machine via setup.py install or similar.

In one of my files, I use the following:

file = "TestParser/View/MainWindow.ui"
cwd = os.getcwd()
argv_path = os.path.dirname(sys.argv[0])
file_path = os.path.join(cwd, argv_path, file)

in order to get the path to MainWindow.ui, when I only know the path relative to the main script's location. This works regardless of from where I call the main script.

The issue is that after an user installs the application on his or her machine, the relative path is different, so this doesn't work. I could use __file__, but according to this, py2exe doesn't have __file__.

Is there a standard way of achieving this? Or a better way?

EDIT:

Should I even worry about py2exe and just use __file__? I have no immediate plans to use py2exe, but I was hoping to learn the proper way of accessing files in this context.

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

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

发布评论

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

评论(1

若水般的淡然安静女子 2024-09-11 16:10:52

对于 setup.py 来说,从来没有一个适用于所有场景的简单答案。 setup.py 是一个巨大的 PITA,可以使用不同的安装过程(例如,“setup.py install”、py2exe、py2app)。

例如,在我的应用程序中,我有以下代码来查找应用程序所需的文件:

def getHome():
  if hasattr(sys, "frozen"):
    if sys.platform == "darwin": # OS X
      return os.path.join(os.path.dirname(os.path.dirname(sys.executable)), "Resources")
    return os.path.dirname(sys.executable)
  else:
    return os.path.dirname(__file__)

为使用 py2exe 和 py2app 创建的应用程序设置“frozen”。

因此,要回答您的问题,请使用 __file__ 并且不用担心 py2exe。如果您需要使用 py2exe,您可能无论如何都需要创建一个特殊情况。

With setup.py there is never a simple answer that works for all scenarios. Setup.py is a huge PITA to get working with different installation procedures (e.g., "setup.py install", py2exe, py2app).

For example, in my app, I have this code to find files needed by the app:

def getHome():
  if hasattr(sys, "frozen"):
    if sys.platform == "darwin": # OS X
      return os.path.join(os.path.dirname(os.path.dirname(sys.executable)), "Resources")
    return os.path.dirname(sys.executable)
  else:
    return os.path.dirname(__file__)

"frozen" is set for apps created with py2exe and py2app.

So to answer your question, use __file__ and do not worry about py2exe. If you ever need to use py2exe, you will probably need to create a special case anyway.

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