Python中的配置文件放在哪里?
在开发模式中,我有以下目录树:Python中的配置文件放在哪里?,python,pythonpath,configparser,Python,Pythonpath,Configparser,在开发模式中,我有以下目录树: | my_project/ | setup.py | my_project/ | __init__.py | main.py | conf/ | myproject.conf 我用来解析myproject.conf文件 在我的代码中,很容易加载具有良好路径的文件:my_project/conf/myproject.conf 问题是:当我使用setup.py安装我的项目时,配置文件(由于setup.py)位于/etc/my_
| my_project/
| setup.py
| my_project/
| __init__.py
| main.py
| conf/
| myproject.conf
我用来解析myproject.conf
文件
在我的代码中,很容易加载具有良好路径的文件:my_project/conf/myproject.conf
问题是:当我使用setup.py安装我的项目时,配置文件(由于setup.py)位于/etc/my_project/myproject.conf
中,而我的应用程序位于/usr/lib/python/site packages/my_project/
中
如何在“生产”模式下在项目中引用我的my_project/conf/myproject.conf
文件,以及如何在“开发”模式下引用本地文件(my_project/conf/myproject.conf
)
此外,如果可能的话,我希望是可移植的(例如在windows上工作)
这样做的好方法是什么?我认为没有一个干净的方法来解决这个问题。您可以简单地选择测试“本地”文件是否存在,这将在开发模式下工作。否则,返回到生产路径:
import os.path
main_base = os.path.dirname(__file__)
config_file = os.path.join(main_base, "conf", "myproject.conf")
if not os.path.exists(config_file):
config_file = PROD_CONFIG_FILE # this could also be different based on the OS
您看到配置文件是如何工作的了吗?阅读“rc”文件,有时也被称为“rc”。“bashrc”、“vimrc”等 通常会对配置文件进行多步骤搜索
/myproject.conf
~User/myproject.conf
)/etc/myproject/myproject.conf
)MYPROJECT\u CONF
)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
如果您正在使用
设置工具
,请参阅上的章节。不要试图自己查找文件。该软件包在为各种平台上安装的应用找到标准位置方面做得很好。我想知道扩展它以发现或允许开发人员处于某种“卸载”状态是否有意义。另一种选择是像“boto”一样将所有.cfg
和.ini
文件保留在主目录中
import os.path
config_file = os.path.join(os.path.expanduser("~"), '.myproject')
第节下的文件提到:
data\u files
选项可用于指定模块分发所需的其他文件:配置文件、消息目录、数据文件,以及任何不属于先前类别的文件
更新S.Lott的答案 现在不推荐使用方法
configparser.configparser.readfp()
您可以直接对多个文件使用configparser.configparser.read()
方法
例如:
导入配置解析器
config=configparser.configparser()
所有配置文件=['/path/to/file1'、'/path/to/file2'、'/path/to/file3']
读取(所有配置文件)
注意:
- 后面的配置文件中的配置选项将覆盖前面的配置文件
- 如果配置文件不存在,
将忽略它read()
- 如果需要从文件中读取所需选项,请先使用
read\u file()
不过,这不是问题所要求的在Windows中的工作方式。这将“在Windows上工作”。它可能不是Windows的“典型”,但它确实有效。呃-为什么你要尝试使用with语句?引用的文件可能不存在。另外请注意,对于Linux,有XDG规范,因此您应该将配置存储在~/.config/
os.path中。如果您的windows帐户与windows目录服务相关联,expanduser(“~”
)会出现问题。嘿,您可以从os.path.join命令中删除括号,或者将*放在列表之前吗,它将采用可变参数而不是列表。现在不鼓励使用~/.myapp
。相反,您应该遵循,并将其放在~/$XDG\u CONFIG\u HOME/myapp
,这可能是~/.CONFIG/myapp
。上面的链接不再有效。我想新的联系是,但事情已经改变了。当前的文档指向,这就是我猜这条评论想要指向的。到目前为止,使用5月份记录的data\u files
选项似乎是可行的。