在setup.py安装后访问文件

时间:2010-06-06 20:17:05

标签: python file py2exe setup.py

我正在开发一个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,但我希望在此上下文中学习正确访问文件的方式。

1 个答案:

答案 0 :(得分:1)

使用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创建的应用程序设置“冻结”。

所以要回答你的问题,请使用__file__,不要担心py2exe。如果你需要使用py2exe,你可能需要创建一个特殊的案例。