我从来没有考虑任何类型的软件分发(我在这个项目中使用python),所以现在我不确定文件名处理的“最佳”或最常用的方法。现在,我使用可执行程序从顶级目录中为所有图像,配置文件,...使用相对路径。
当程序从不同的位置执行时,它自然会失败。我的问题是,如果可以将程序的beginnig中的curent工作目录更改为__file__的dirname(它在子shell中执行,所以我没有看到这个问题 - 但我想运行platfrom independent,所以我不确定windows如何处理它,或者如果它问题我可以解决使用distutils和安装整个程序(我不喜欢)。或者,如果还有其他(更好的)方法?
基本上我可以轻松解决问题,我只是想知道通常做什么,谢谢你的建议。
答案 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模块来操作路径。