相对路径接近(python)

时间:2013-09-07 09:38:53

标签: python install relative-path distutils

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

当程序从不同的位置执行时,它自然会失败。我的问题是,如果可以将程序的beginnig中的curent工作目录更改为__file__的dirname(它在子shell中执行,所以我没有看到这个问题 - 但我想运行platfrom independent,所以我不确定windows如何处理它,或者如果它问题我可以解决使用distutils和安装整个程序(我不喜欢)。或者,如果还有其他(更好的)方法?

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

2 个答案:

答案 0 :(得分:2)

最佳做法是使用绝对路径。

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

import os.path

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

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

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

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

答案 1 :(得分:1)

为给定模块定义了__file__,并非所有模块都具有此属性。根据{{​​3}}:

  

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

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