When using pyenv and it’s pyenv-virtualenv -plugin, the activated virtualenv does not include the /bin -directory of the base python version in the PATH.



pyenv lets you easily switch between multiple versions of Python. It’s simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well.


pyenv-virtualenv is a pyenv plugin that provides features to manage virtualenvs and conda environments for Python on UNIX-like systems.

Python environment at the time

  1. pyenv installed as defined in the Basic github checkout
  2. pyenv-virtualenv installed as defined here
  3. python version 3.6.4 installed

     $ pyenv install 3.6.4
     $ pyenv versions
  4. virtualenv for Ansible created

     $ pyenv virtualenv 3.6.4 ansible
     $ pyenv virtualenvs
         3.6.4/envs/ansible (created from /home/askolsam/.pyenv/versions/3.6.4)
         ansible (created from /home/askolsam/.pyenv/versions/3.6.4)
  5. Ansible 2.5.6 installed

     $ pyenv activate ansible
     $ pip install ansible==2.5.6


I was trying to update an local ansible module from python 2 to 3, but command 2to3 just returned ‘command not found’:

    $ pyenv activate ansible
    $ python --version
    Python 3.6.4
    $ pyenv which 2to3
    pyenv: 2to3: command not found
    The '2to3' command exists in these Python versions:
    $ pyenv deactivate

    $ pyenv global 3.6.4
    $ python --version
    Python 3.6.4
    $ pyenv which 2to3


Someone else had this same issue too. The solution is not to use pyenv activate but pyenv global or pyenv local:

    $ pyenv global ansible 3.6.4
    $ pyenv version
    ansible (set by /home/askolsam/.pyenv/version)
    3.6.4 (set by /home/askolsam/.pyenv/version)