Skip to content Skip to sidebar Skip to footer

How To Get The Current Running Module Path/name

I've searched and this seems to be a simple question without a simple answer. I have the file a/b/c.py which would be called with python -m a.b.c. I would like to obtain the value

Solution 1:

This works for me:

__loader__.fullname

Also if I do python -m b.c from a\ I get 'b.c' as expected.

Not entirely sure what the __loader__ attribute is so let me know if this is no good.

edit: It comes from PEP 302: http://www.python.org/dev/peps/pep-0302/

Interesting snippets from the link:

The load_module() method has a few responsibilities that it must fulfill before it runs any code:

...

  • It should add an __loader__ attribute to the module, set to the loader object. This is mostly for introspection, but can be used for importer-specific extras, for example getting data associated with an importer.

So it looks like it should work fine in all cases.

Solution 2:

I think you're actually looking for the __name__ special variable. From the Python documentation:

Within a module, the module’s name (as a string) is available as the value of the global variable __name__.

If you run a file directly, this name will __main__. However, if you're in a module (as in the case where you're using the -m flag, or any other import), it will be the complete name of the module.

Solution 3:

When run with -m, sys.path[0] contains the full path to the module. You could use that to build the name.

source: http://docs.python.org/using/cmdline.html#command-line

Another option may be the __package__ built in variable which is available within modules.

Solution 4:

Number of options are there to get the path/name of the current module.

First be familiar with the use of __file__ in Python, Click here to see the usage.

It holds the name of currently loaded module.

Check/Try the following code, it will work on both Python2 & Python3.

» module_names.py

import osprint (__file__)
print (os.path.abspath(__file__))
print (os.path.realpath(__file__))

Output on MAC OS X:

MacBook-Pro-2:practice admin$ python module_names.py 
module_names.py
/Users/admin/projects/Python/python-the-snake/practice/module_names.py
/Users/admin/projects/Python/python-the-snake/practice/module_names.py

So here we got the name of current module name and its absolute path.

Solution 5:

The only way is to do path manipulation with os.getcwd(), os.path, file and whatnot, as you mentioned.

Actually, it could be a good patch to implement for optparse / argparse (which currently replace "%prog" in the usage string with os.path.basename(sys.argv[0]) -- you are using optparse, right? -- ), i.e. another special string like %module.

Post a Comment for "How To Get The Current Running Module Path/name"