0

我从来没有考虑过任何类型的软件分发(我在这个项目中使用 python),所以现在我不确定文件名处理的“最佳”或最常用的方法。现在,我使用可执行程序的顶级目录中的所有图像、配置文件……的相对路径。

因此,当程序从不同位置执行时,它自然会失败。我的问题是,如果可以将程序开头的当前工作目录更改为 __file__ 的目录名(它是在子 shell 中执行的,所以我看不出这有什么问题 - 但我想独立运行 platfrom,所以我不确定 Windows 是如何处理它的),或者如果它出现问题,我可以使用 distutils 解决并安装整个程序(我不想这样做)。或者是否还有其他(更好的)方法?

所以基本上我可以轻松解决问题,我只是想知道通常该怎么做,谢谢您的建议。

4

2 回答 2

2

最佳实践是使用绝对路径。

使用__file__路径不要更改目录,而是使用它来计算用于构建绝对路径的基本路径。在顶级模块中,添加:

import os.path

BASE = os.path.dirname(os.path.abspath(__file__))

并重BASE用以构建绝对路径:

abspath = os.path.join(BASE, relpath)

更改工作目录很少需要或有用。

于 2013-09-07T09:55:22.453 回答
1

Well__file__是为给定模块定义的,并非所有模块都具有此属性。根据文档

__file__是从文件中加载模块的文件的路径名(如果它是从文件中加载的)。__file__静态链接到解释器的 C 模块不存在该属性;对于从共享库动态加载的扩展模块,它是共享库文件的路径名。

由于您打算在自己的模块中调用它,因此在 linux、windows 甚至 osx 上应该没有任何问题。当然,使用 os.path 模块来操作路径。

于 2013-09-07T10:02:47.510 回答