(Sorry for the wall of text, but I wanted to make sure all relevant details of my problem are included)
I am roughly following the application structure outlined here. I also have a logging.conf file, which I want my application to use in all cases:
- when calling my application with python -m myapp(I have a__main__.pyfor that)
- when doing cmd1,cmd2,cmd3, ... (I have someconsole_scriptsinsetup.py:entry_points)
The structure is roughly:
myapp/
├── build
├── dist
├── MANIFEST.in
├── myapp
│   ├── lib
│   │   ├── helpers.py
│   │   ├── __init__.py
│   │   └── startup.py
│   ├── logging.conf
│   ├── cmd
│   │   ├── cmd1.py
│   │   ├── cmd2.py
│   │   ├── cmd3.py
│   │   └── __init__.py
│   ├── __main__.py
│   ├── settings.py
│   └── tox.ini
├── README.md
├── requirements.txt
├── setup.cfg
├── setup.py
├── tests
└── venv
In one of my modules (lib/startup.py), used in all of my application entry points (__main__.py, cmd1, cmd2, cmd3, ...) I am (early) loading the logger configuration, with 
logging.config.fileConfig('logging.conf')
In my MANIFEST.in, the logging.conf is installed. Everything seems to be installed correctly in the virtualenv when doing python setup.py install:
- the application is properly installed
- the logging.confis copied
- the scripts (cmd1, ...) are created
And the application can be started, in all provided ways:
- python -m myapp
- cmd1,- cmd2,- cmd3
And I can also run it in my dev environment:
myapp/myapp $ python cmd/cmd1.py
But, whereas in the development environment logging.conf is found without problems (it is in the cwd), the installed module can not locate this file, and execution fails:
$ python -m cmd1
Traceback (most recent call last):
  File "/usr/lib/python3.4/runpy.py", line 170, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.4/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "myapp/venv/lib/python3.4/site-packages/myapp-0.5.0-py3.4.egg/myapp/__main__.py", line 5, in <module>
    from myapp.cmd.cmd1 import main
  File "myapp/venv/lib/python3.4/site-packages/myapp-0.5.0-py3.4.egg/myapp/cmd/cmd1.py", line 2, in <module>
    from myapp.lib.startup import start_trading
  File "myapp/venv/lib/python3.4/site-packages/myapp-0.5.0-py3.4.egg/myapp/lib/startup.py", line 10, in <module>
    logging.config.fileConfig('logging.conf')
  File "/usr/lib/python3.4/logging/config.py", line 76, in fileConfig
    formatters = _create_formatters(cp)
  File "/usr/lib/python3.4/logging/config.py", line 109, in _create_formatters
    flist = cp["formatters"]["keys"]
  File "/usr/lib/python3.4/configparser.py", line 937, in __getitem__
    raise KeyError(key)
KeyError: 'formatters'
How can I ensure that my installed application is able to find a module-relative file? I can not use absolute paths in my code, because I do not know the installation path ... Are there any recommended best practices for this?
 
     
    