Python 根据启动目录查找配置文件位置的最佳方法?

Python 根据启动目录查找配置文件位置的最佳方法?,python,configuration,Python,Configuration,我现在正在开发一个需要配置文件的模块 配置文件是可选的,可以在启动模块时提供,或者(理想情况下)从与应用程序位于同一目录中的defaults.json文件加载。defaults.json文件的用途还用于用setdefault填充缺少的键 问题来自模块的启动位置 ..\Application=python-m Application.web.ApplicationServer ..\Application\Application=python-mweb.ApplicationServer ..\A

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

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

问题来自模块的启动位置

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

..\Application\Application
=
python-mweb.ApplicationServer

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

…读作“如果我在文件夹中,我键入此命令以启动服务器。”

我如何确定程序从何处启动(可能使用
os.getcwd()
)来确定传递到
json.load(open(),'r+b'))的文件路径以确保它始终成功

谢谢


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

如果要获取包含代码的文件的路径(相对于启动代码的位置),则该路径将存储在模块的
\uuuu file\uuuu
中,如果您:

  • 不希望您的模块安装有
    setup.py
    /
    distutils
    计划
  • 并希望您的代码+配置包含在一个位置
所以一个
codeDir=os.path.dirname(os.path.abspath(_文件__))
应该总是有效的

如果你想做一个安装程序,我想说的是习惯性的做法是把代码放在一个地方,把配置之类的东西放在其他地方。这取决于你的操作系统。在linux上,一个常见的位置是
/home/user/.local/share/yourmodule
或就在
/home/user/.yourmodule
的正下方。Windows也有类似的应用程序数据位置。 对于这两种情况,
os.environ['HOME']
/
os.getenv('HOME')
是一个很好的起点,然后您可能应该检测到该操作系统,并将您的内容放在具有良好文件夹名称的预期位置


我不能保证这些都是最佳实践,但至少它们似乎没有黑客攻击。

如果您想获得代码所在文件的路径,那么它将存储在模块的
\uuuuuuuuu文件中,如果您:

  • 不希望您的模块安装有
    setup.py
    /
    distutils
    计划
  • 并希望您的代码+配置包含在一个位置
所以一个
codeDir=os.path.dirname(os.path.abspath(_文件__))
应该总是有效的

如果你想做一个安装程序,我想说的是习惯性的做法是把代码放在一个地方,把配置之类的东西放在其他地方。这取决于你的操作系统。在linux上,一个常见的位置是
/home/user/.local/share/yourmodule
或就在
/home/user/.yourmodule
的正下方。Windows也有类似的应用程序数据位置。 对于这两种情况,
os.environ['HOME']
/
os.getenv('HOME')
是一个很好的起点,然后您可能应该检测到该操作系统,并将您的内容放在具有良好文件夹名称的预期位置


我不能保证这些都是最佳实践,但至少它们似乎没有黑客攻击。

如果您想获得代码所在文件的路径,那么它将存储在模块的
\uuuuuuuuu文件中,如果您:

  • 不希望您的模块安装有
    setup.py
    /
    distutils
    计划
  • 并希望您的代码+配置包含在一个位置
所以一个
codeDir=os.path.dirname(os.path.abspath(_文件__))
应该总是有效的

如果你想做一个安装程序,我想说的是习惯性的做法是把代码放在一个地方,把配置之类的东西放在其他地方。这取决于你的操作系统。在linux上,一个常见的位置是
/home/user/.local/share/yourmodule
或就在
/home/user/.yourmodule
的正下方。Windows也有类似的应用程序数据位置。 对于这两种情况,
os.environ['HOME']
/
os.getenv('HOME')
是一个很好的起点,然后您可能应该检测到该操作系统,并将您的内容放在具有良好文件夹名称的预期位置


我不能保证这些都是最佳实践,但至少它们似乎没有黑客攻击。

如果您想获得代码所在文件的路径,那么它将存储在模块的
\uuuuuuuuu文件中,如果您:

  • 不希望您的模块安装有
    setup.py
    /
    distutils
    计划
  • 并希望您的代码+配置包含在一个位置
所以一个
codeDir=os.path.dirname(os.path.abspath(_文件__))
应该总是有效的

如果你想做一个安装程序,我想说的是习惯性的做法是把代码放在一个地方,把配置之类的东西放在其他地方。这取决于你的操作系统。在linux上,一个常见的位置是
/home/user/.local/share/yourmodule
或就在
/home/user/.yourmodule
的正下方。Windows也有类似的应用程序数据位置。 对于这两种情况,
os.environ['HOME']
/
os.getenv('HOME')
是一个很好的起点,然后您可能应该检测到该操作系统,并将您的内容放在具有良好文件夹名称的预期位置

我不能保证这些都是最佳实践,但至少它们似乎没有黑客攻击