[Python-Dev] towards a stricter definition of sys.executable

Thomas Heller theller at python.net
Thu Mar 16 17:35:11 CET 2006


Fredrik Lundh wrote:
> the definition of sys.executable is a bit unclear, something that has led to
> incompatible use in deployed code.
> 
> the docstring for sys.executable says "pathname of this Python interpreter",
> which can be interpreted as either
> 
>     a) sys.executable points to the executable that was used to load the
>     Python interpreter library/dll.
> 
>     this use is supported by the docstring and the implementation, and is quite
>     common in the wild.  an application using this interpretation may
> 
>     - call sys.executable to run another instance of itself
>     - extract data from resources embedded in (or attached to) sys.executable
>     - locate configuration data etc via os.path.dirname(sys.executable)
> 
>     etc.
> 
> or
> 
>     b) sys.executable points to a standard Python interpreter executable of
>     the same version, and having the same library, as the currently running
>     interpreter instance.
> 
>     this use is supported by more strict interpretation of the word "interpreter"
>     (as an executable, rather than an implementation DLL), and is quite common
>     in the wild.  an application using this interpretation may
> 
>     - call sys.executable to run a Python script in the same environment as itself.
> 
>     etc.
> 
> or
> 
>     c) sys.executable points to the file containing the actual ("this") interpreter.  I
>     haven't seen any code that assumes this, probably because no implementation
>     uses this interpretation...
> 
> for programs that are invoked via the standard interpreter, case (a) and (b) are of
> course identical.

py2exe used the a) interpretation.  It uses sys.executable to find the exe that is currently
running, for registration of COM servers, and for finding resources in the exe: the manifest
file that's needed for GUI applications on WindowsXP to give the native XP look and feel,
icons, typelibs, and more.

> the problem is when the interpreter library is embedded in some other application;
> should sys.executable be set to the actual EXE used to start the program, or to
> something else ?  if it's set to something else, how can that application do the things
> that's described under (a) ?

The use case for b) 'call sys.executable to run a Python script' makes no sense for
a py2exe'd application.

Thomas



More information about the Python-Dev mailing list