[Python-ideas] os.path.here()
Giampaolo Rodola'
g.rodola at gmail.com
Wed Feb 19 17:52:19 CET 2014
Hello python devs.
One thing which appears to be pretty common in many scripts is figuring out
module's parent directory path.
I often find myself writing:
HERE = os.path.abspath(os.path.dirname(__file__))
...at the top of a module.
Also, it is not rare to do further concatenations in order to declare where
static files are located:
CONF_FILE = os.path.abspath(os.path.join(HERE, 'app.conf'))
CERT_FILE = os.path.abspath(os.path.join(HERE, 'cert.pem'))
THIS_FILE = os.path.abspath(os.path.join(HERE, __file__))
A quick search within Python source code shows this is indeed a very common
pattern:
$ find . -name \*.py | xargs grep "os\.path" | grep __file__
Just some examples (there are *many*):
http://hg.python.org/cpython/file/186f6f56f4bc/Lib/distutils/tests/__init__.py#l21
http://hg.python.org/cpython/file/186f6f56f4bc/PCbuild/build_tkinter.py#l11
http://hg.python.org/cpython/file/186f6f56f4bc/PCbuild/build_ssl.py#l68
http://hg.python.org/cpython/file/186f6f56f4bc/Tools/msi/uisample.py#l2
http://hg.python.org/cpython/file/186f6f56f4bc/Lib/distutils/tests/test_config_cmd.py#l30
http://hg.python.org/cpython/file/186f6f56f4bc/Lib/unittest/test/testmock/__main__.py#l7
http://hg.python.org/cpython/file/186f6f56f4bc/Lib/pydoc.py#l2463
I think there's space for improvements here so my proposal is to add a
simple os.path.here() function working like this:
>>> # assuming /home/giampaolo/app/run.py is the current module:
>>> os.path.here()
/home/giampaolo/app/
>>> os.path.here(__file__)
/home/giampaolo/app/run.py
>>> os.path.here('..')
/home/giampaolo/
The implementation is pretty straightforward:
def here(concat=None):
"""Return the absolute path of the parent directory where the
script is defined.
"""
here = os.path.abspath(os.path.dirname(__file__))
if concat is not None:
here = os.path.abspath(os.path.join(here, concat))
return here
Thoughts?
--
Giampaolo - http://grodola.blogspot.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20140219/ebcdfcd4/attachment.html>
More information about the Python-ideas
mailing list