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/