我正在开发一个需要配置文件的模块。
配置文件是可选的,可以在模块启动时提供,或者(理想情况下)从与应用程序位于同一目录中的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'))
的文件路径,以便它始终成功?
感谢。
注意:我非常希望得到一个最佳做法答案,因为我已经可以“共同”破解一个解决方案 - 我只是不认为我的方式是最好的方式。谢谢!的
答案 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。
我不能发誓这些是最好的做法,但至少它们看起来相当无洞。