我正在开发一个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,但我希望在此上下文中学习正确访问文件的方式。
答案 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,你可能需要创建一个特殊的案例。