从启动目录查找配置文件位置的最佳方法是什么?

0 投票
1 回答
839 浏览
提问于 2025-04-18 14:27

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

这个配置文件是可选的,可以在启动模块时提供,或者(最好是)从一个叫做 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 个回答

3

如果你想获取代码文件的路径,相对于你启动它的地方,那么这个路径可以在模块的 __file__ 中找到。你可以在以下情况下使用它:

  • 不想通过 setup.pydistutils 来安装你的模块。
  • 想把代码和配置文件放在一个地方。

所以,使用 codeDir = os.path.dirname(os.path.abspath(__file__)) 这个方法通常是有效的。

如果你想制作一个安装程序,通常的做法是把代码放在一个地方,而把配置文件放在其他地方。这会根据你的操作系统而有所不同。在Linux系统中,一个常见的存放位置是 /home/user/.local/share/yourmodule,或者直接放在 /home/user/.yourmodule 下。Windows系统也有类似的应用数据存放位置。

对于这两种系统,os.environ['HOME']os.getenv('HOME') 是一个不错的起点,然后你可能需要检测操作系统,并把你的文件放在合适的位置,起个好听的文件夹名字。

我不能保证这些是最佳实践,但至少看起来没有什么黑科技的成分。

撰写回答