Just an FYI that I actually plan to try and make the activation scripts (at
least under PowerShell) completely static so they can be signed.

On Tue, Jun 18, 2019 at 3:31 PM Caleb Donovick <donov...@cs.stanford.edu>
wrote:

> Currently EnvBuilder allows for a number of customizations of virtual
> environments, changing which python is used, automatically installing
> libraries, etc...  However, it does not allow for any modifications of the
> activate script itself (unless one wants to rewrite it completely).
> However, a fairly common requirement for python packages is to edit some
> environmental variable e.g., DJANGO_SETTINGS_MODULE=<settings>.
>
> Which leaves developers with two options set the variables globally or
> manually edit the activate script.  Granted the activate script has been
> fairly static for the past few years, so a patch file can be used after
> manually editing once but its not the most elegant solution.  Further,
> there is no guarantee that activate script will be static going forward.
> In my mind there is a very simple solution, allow EnvBuilder to extend the
> set of variables which are set and restored on activate / deactivate (or
> more generally have activate / deactivate hooks).
>
> In the cpython implementation of venv there is a number of template
> parameters in the skeleton activate scripts which are filled by the
> EnvBuilder (__VENV_DIR__, __VENV_NAME__, ...).  A simple solution would be
> to extend these with __VENV_ACTIVATE_EXTRAS__ and
> __VENV_DEACTIVATE_EXTRAS__ where by default
> ```
> #Let env_vars: Dict[str, str] be the custom environmental variables
> __VENV_ACTIVATE_EXTRAS__ = ''.join(f'''
> _OLD_VIRTUAL_{key}="${key}"
> {key}="{value}"
> export {key}
> ''' for key,value in env_vars.items())
>
> __VENV_DEACTIVATE_EXTRAS__ = ''.join(f'''
>     if [ -n "${{_OLD_VIRTUAL_{key}:-}}" ] ; then
>         {key}="${{_OLD_VIRTUAL_{key}:-}}"
>         export {key}
>         unset _OLD_VIRTUAL_{key}
>     fi
> ''' for key in env_vars)
> ```
>
> With __VENV_ACTIVATE_EXTRAS__ at
>
> https://github.com/python/cpython/blob/54cf2e0780ca137dd9abea5d3d974578ce0c18a9/Lib/venv/scripts/common/activate#L46
> and __VENV_DEACTIVATE_EXTRAS__ at
>
> https://github.com/python/cpython/blob/54cf2e0780ca137dd9abea5d3d974578ce0c18a9/Lib/venv/scripts/common/activate#L16
>
> Full activate / deactivate hooks could be achieved by setting
> __VENV_*_EXTRAS__ to be arbitrary shell commands.
>
> Caleb Donovick
>
> _______________________________________________
> Python-ideas mailing list -- python-ideas@python.org
> To unsubscribe send an email to python-ideas-le...@python.org
> https://mail.python.org/mailman3/lists/python-ideas.python.org/
> Message archived at
> https://mail.python.org/archives/list/python-ideas@python.org/message/MJNFEFT4GBVBEETJWZUQM5SS6C34PT3K/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/IFDZX73T6PA3ALXAXCFRYK6TEHJ3IIOX/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to