diff --git a/README.md b/README.md index f43c4aa1..b436c18d 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,7 @@ This project was forked from [rbenv](https://github.com/rbenv/rbenv) and * [Locating Pyenv-provided Python Installations](#locating-pyenv-provided-python-installations) * [Advanced Configuration](#advanced-configuration) * [Using Pyenv without shims](#using-pyenv-without-shims) + * [Running nested shells from Python-based programs](#running-nested-shells-from-python-based-programs) * [Environment variables](#environment-variables) * **[Development](#development)** * [Contributing](#contributing) @@ -754,6 +755,32 @@ as currently configured. `pyenv exec` works by prepending `$(pyenv root)/versions//bin` to `PATH` in the ``'s environment, the same as what e.g. RVM does. +### Running nested shells from Python-based programs + +In addition to altering `PATH`, `pyenv exec` sets `PYENV_VERSION` in the +executed program's environment to ensure that it won't spontaneouly switch to +using a different Python version. + +Some Python-based programs (e.g. Jupyter) can spawn nested shell sessions. +`pyenv version` in such a shell would dutily report that the current version was +set by an environment variable. + +Depending on your use case, this version lock may be undesirable. +In this case, you need to change or unset the environment variable, +either directly or via `pyenv shell`. + +To automate this, you can do so in your shell's interactive startup file, +detecting the nested shell session via some characteristic environment variable +that the spawning application sets. + +E.g. in Jupyter's case (as of this writing), it's `JUPYTER_SERVER_ROOT`, +and the corresponding `~/.bashrc` line may look like this: + +```bash +[[ -n $JUPYTER_SERVER_ROOT ]] && unset PYENV_VERSION +``` + + ### Environment variables