Python中配置文件放在哪里?
在开发模式下,我的文件夹结构是这样的:
| my_project/
| setup.py
| my_project/
| __init__.py
| main.py
| conf/
| myproject.conf
我使用 ConfigParser 来读取 myproject.conf
这个配置文件。
在我的代码里,加载这个文件很简单,只需要用正确的路径:my_project/conf/myproject.conf
问题是:当我用 setup.py 安装我的项目时,配置文件会被放在 /etc/my_project/myproject.conf
这个位置,而我的应用程序则在 /usr/lib/python<version>/site-packages/my_project/
里。
我该如何在“生产”模式下引用 my_project/conf/myproject.conf
这个文件,同时在“开发”模式下又能引用本地的文件 (my_project/conf/myproject.conf
) 呢?
另外,如果可以的话,我希望这个方法是可移植的(比如在 Windows 上也能用)。
有什么好的做法吗?
7 个回答
如果你在使用 setuptools
,可以看看关于 使用非包数据文件 的章节。别自己去找那些文件。
appdirs这个包很好地帮助我们找到不同平台上安装应用程序的标准位置。我在想,如果能扩展这个功能,让开发者也能发现或者标记一些“未安装”的状态,这样是否会更有意义呢。
你知道配置文件是怎么工作的吗?可以了解一下“rc”文件,这种文件有时被称为“rc”文件,比如“bashrc”、“vimrc”等等。
通常,查找配置文件的过程是分几个步骤的。
首先在本地目录查找,比如
./myproject.conf
。然后在用户的主目录中查找,像是
~user/myproject.conf
。接着在一个系统的标准目录中查找,比如
/etc/myproject/myproject.conf
。最后在一个由环境变量指定的地方查找,比如
MYPROJECT_CONF
。
Python的安装目录通常是最后一个查找的地方。
config= None
for loc in os.curdir, os.path.expanduser("~"), "/etc/myproject", os.environ.get("MYPROJECT_CONF"):
try:
with open(os.path.join(loc,"myproject.conf")) as source:
config.readfp( source )
except IOError:
pass