[Python-Dev] draft PEP: virtual environments

Chris McDonough chrism at plope.com
Sat Oct 29 01:10:08 CEST 2011


This is really very comprehensive, thank you!

> Why not modify sys.prefix?
> - --------------------------
> 
> As discussed above under `Backwards Compatibility`_, this PEP proposes
> to add ``sys.site_prefix`` as "the prefix relative to which
> site-package directories are found". This maintains compatibility with
> the documented meaning of ``sys.prefix`` (as the location relative to
> which the standard library can be found), but means that code assuming
> that site-packages directories are found relative to ``sys.prefix``
> will not respect the virtual environment correctly.
> 
> Since it is unable to modify ``distutils``/``sysconfig``,
> `virtualenv`_ is forced to instead re-point ``sys.prefix`` at the
> virtual environment.
> 
> An argument could be made that this PEP should follow virtualenv's
> lead here (and introduce something like ``sys.base_prefix`` to point
> to the standard library and header files), since virtualenv already
> does this and it doesn't appear to have caused major problems with
> existing code.
> 
> Another argument in favor of this is that it would be preferable to
> err on the side of greater, rather than lesser, isolation. Changing
> ``sys.prefix`` to point to the virtual environment and introducing a
> new ``sys.base_prefix`` attribute would err on the side of greater
> isolation in the face of existing code's use of ``sys.prefix``.

It would seem to make sense to me to err on the side of greater
isolation, introducing sys.base_prefix to indicate the base prefix (as
opposed to sys.site_prefix indicating the venv prefix).  Bugs introduced
via a semi-isolated virtual environment are very difficult to
troubleshoot.  It would also make changes to existing code unnecessary.
I have encountered no issues with virtualenv doing this so far.

- C




More information about the Python-Dev mailing list