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,但我希望学习在这种情况下访问文件的正确方法。
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
对于 setup.py 来说,从来没有一个适用于所有场景的简单答案。 setup.py 是一个巨大的 PITA,可以使用不同的安装过程(例如,“setup.py install”、py2exe、py2app)。
例如,在我的应用程序中,我有以下代码来查找应用程序所需的文件:
为使用 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:
"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.