In development mode, I have the following directory tree :
| my_project/
| setup.py
| my_project/
| __init__.py
| main.py
| conf/
| myproject.conf
I use ConfigParser to parse the myproject.conf
file.
In my code, it's easy to load the file with a good path : my_project/conf/myproject.conf
The problem is : When I install my project using the setup.py, the configuration file are situated (thanks to setup.py) in the /etc/my_project/myproject.conf
and my application in the /usr/lib/python<version>/site-packages/my_project/
.
How can I refer my my_project/conf/myproject.conf
file in my project in "production" mode, and refer to the local file (my_project/conf/myproject.conf
) in "devel" mode.
In addition, I would like to be portable if possible (Work on windows for example).
What's the good practice to do that ?
Have you seen how configuration files work? Read up on "rc" files, as they're sometimes called. "bashrc", "vimrc", etc.
There's usually a multi-step search for the configuration file.
Local directory. ./myproject.conf
.
User's home directory (~user/myproject.conf
)
A standard system-wide directory (/etc/myproject/myproject.conf
)
A place named by an environment variable (MYPROJECT_CONF
)
The Python installation would be the last place to look.
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