从启动目录查找配置文件位置的最佳方法是什么?
我现在正在开发一个模块,需要一个配置文件。
这个配置文件是可选的,可以在启动模块时提供,或者(最好是)从一个叫做 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 个回答
如果你想获取代码文件的路径,相对于你启动它的地方,那么这个路径可以在模块的 __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')
是一个不错的起点,然后你可能需要检测操作系统,并把你的文件放在合适的位置,起个好听的文件夹名字。
我不能保证这些是最佳实践,但至少看起来没有什么黑科技的成分。