Correct idiom for determining path when frozen in 3.4

Ben Finney ben+python at benfinney.id.au
Mon Mar 17 05:02:15 EDT 2014


Mark Summerfield <list at qtrac.plus.com> writes:

> What is the correct idiom for getting the path to a top-level module

I'm not sure I understand what this concept is. What do you mean by
“top-level module”?

> in 3.3 and 3.4 when the module might be frozen?
>
> At the moment I'm using this:
>
>     if getattr(sys, "frozen", False):
>         path = os.path.dirname(sys.executable)
>     else:
>         path = os.path.dirname(__file__)

That looks okay. Does it work?

The code is readable and Pythonic as is. But I would suggest several
improvements::

    if getattr(sys, "frozen"):    # ‘getattr’ will return None by default

Also, why test for “sys.frozen” when you're about to use
“sys.executable”?

    if getattr(sys, "executable"):

Lastly, it's slightly more Pythonic to execute the normal path
unconditionally, and let it raise an exception if there's a problem::

    try:
        executable = sys.executable
    except AttributeError:
        executable = __file__
    path = os.path.dirname(executable)

-- 
 \     “It is far better to grasp the universe as it really is than to |
  `\    persist in delusion, however satisfying and reassuring.” —Carl |
_o__)                                                            Sagan |
Ben Finney




More information about the Python-list mailing list