It looks like this was caused by an incorrect assumption on the directory structure of the virtualenv directory. According to the virtualenv docs only POSIX systems follow the structure "/path/to/venv/bin/", while windows systems use "/path/to/venv/Scripts" for the location of the binary files, most importantly including the python interpreter (see: https://virtualenv.pypa.io/en/stable/userguide/#windows-notes). This meant that the wrong path was added to `exec-path` and so we were starting the python shell installed on the system, rather than the one bundled inside of the virtualenv. This should be addressed in the attached patch file - it just adds a special case for Windows and prepends that path to the system PATH. I also updated the docs for the `python-shell-calculate-exec-path` function to make it more clear that using the python interpreter bundled in the virtualenv will automatically set the PYTHONPATH to point at the libraries inside of the virtualenv - something that was not immediately obvious to me. Steps to verify that patch is working correctly: 1. (On Windows) 2. Create virtualenv (eg. 'virtualenv ~/venv') 3. Install a library NOT currently installed on the your system inside the virtualenv. ex: ~/venv/Scripts/activate.bat pip install sphinx deactivate.bat 4. Start emacs 5. Set `python-shell-virtualenv-root` to the root directory of your virtualenv (eg. "/home/jtimmons/venv") 6. M-x run-python 7. Make sure that you can import the library installed in the virtualenv in step 3 (eg. 'import sphinx')