【问题标题】:Best way to find the location of a config file based from launching directory?从启动目录中查找配置文件位置的最佳方法?
【发布时间】:2014-07-23 15:20:07
【问题描述】:

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

配置文件是可选的,可以在模块启动时提供,或者(理想情况下)从与应用程序位于同一目录的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')) 的文件路径,以便它始终成功?

谢谢。

注意:我强烈希望获得最佳实践的答案,因为我已经可以一起“破解”解决方案——我只是不认为我的方法是最好的方法。谢谢!

【问题讨论】:

    标签: python configuration


    【解决方案1】:

    如果您想获取包含您的代码相对于其启动位置的文件的路径,则它存储在模块的__file__ 中,如果您可以使用它:

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

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

    如果您想制作一个安装程序,我会说习惯上将代码放在一个地方,而将诸如配置之类的东西放在其他地方。这将取决于您的操作系统。在 linux 上,一个常见的地方是/home/user/.local/share/yourmodule 或直接在/home/user/.yourmodule 下。 Windows 有类似的应用数据位置。 对于两者来说,os.environ['HOME'] / os.getenv('HOME') 是一个很好的起点,然后您应该检测操作系统并将您的东西放在预期的位置,并使用一个不错的文件夹名称。

    我不能发誓这些都是最佳做法,但至少它们看起来相当无黑客攻击。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 2018-02-19
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      相关资源
      最近更新 更多