基于启动目录查找配置文件位置的最佳方法?

时间:2014-07-23 15:20:08

标签: python configuration

我正在开发一个需要配置文件的模块。

配置文件是可选的,可以在模块启动时提供,或者(理想情况下)从与应用程序位于同一目录中的defaults.json文件加载。 defaults.json文件的目的还用于使用setdefault填充缺失的密钥。

问题来自模块的启动位置......

...\Application = python -m application.web.ApplicationServer

...\Application\application = python -m web.ApplicationServer

...\Application\application\web = python ApplicationServer.py

....读作“如果我在文件夹中,我输入此内容即可启动服务器。”

如何确定程序的启动位置(可能使用os.getcwd())以确定要传递给json.load(open(<path>), 'r+b'))的文件路径,以便它始终成功?

感谢。

注意:我非常希望得到一个最佳做法答案,因为我已经可以“共同”破解一个解决方案 - 我只是不认为我的方式是最好的方式。谢谢!

1 个答案:

答案 0 :(得分:3)

如果您希望获取具有相对于其启动位置的代码的文件路径,则将其存储在模块的__file__中,如果您执行以下操作,则可以使用该文件:

  • 不希望您的模块安装setup.py / distutils 方案
  • 并希望您的代码+配置包含在一个位置。

所以codeDir = os.path.dirname(os.path.abspath(__file__))应始终有效。

如果你想制作一个安装程序,我会说按惯例将代码放在一个地方,比如在其他地方配置。这取决于您的操作系统。在linux上,一个常见位置在/home/user/.local/share/yourmodule或直接位于/home/user/.yourmodule下。 Windows有类似app-data的地方。 对于两者而言,os.environ['HOME'] / os.getenv('HOME')是一个很好的起点,然后你应该检测操作系统并将你的东西放在预期的位置,并有一个很好的foldername。

我不能发誓这些是最好的做法,但至少它们看起来相当无洞。