virtualenvpermite criar uma instalação personalizada do Python, por exemplo, em um subdiretório do seu projeto. Cada um dos seus projetos pode, portanto, ter o seu próprio python(ou até vários) sob o respectivo virtualenv. É perfeitamente aceitável que alguns / todos os virtualvvs tenham a mesma versão python(por exemplo, 2.7.16) sem conflito - eles vivem separadamente e não se conhecem. Se você deseja usar qualquer um desses pythons, é necessário activate(executando um script que modificará temporariamente o seu PATHpara garantir que o bin/diretório do virtualenv seja o primeiro). A partir desse ponto, chamar python(ou pipetc.) chamará a versão do virtualenv até você deactivate(que restaura a PATH).
pyenvopera em uma escala mais ampla do que virtualenv- mantém um registro das instalações do Python (e pode ser usado para instalar novas) e permite configurar a versão do Python a ser executada ao usar o pythoncomando. Soa semelhante, mas o uso prático é um pouco diferente. Ele funciona anexando seu pythonscript shim ao seu PATH(permanentemente) e depois decidindo qual "real" pythonchamar. Você pode até configurar o pyenv para chamar um dos pythons do virtualenv (usando o pyenv-virtualenvplug - in). As versões Python que você instala usando pyenventram em seu $(pyenv root)/versions/diretório (por padrão, a raiz do pyenv é ~ / .pyenv), portanto, são mais 'globais' que o virtualenv. Normalmente, você não pode duplicar as versões do Python instaladas pyenv, pelo menos não é a idéia principal.
Para criar um virtualenv com uma versão específica do Python, é necessário ter essa versão em algum lugar do sistema (esteja ela ativada PATHou não) e essencialmente cloná-la no seu virtualenv recém-criado. Obviamente, uma maneira de obter uma versão específica é instalá-la via pyenv. Feito isso, os virtualenvs individuais são livres para divergir, tendo diferentes módulos (ou versões dos mesmos) instalados neles.
Em resumo:
virtualenv permite criar instalações python locais e independentes, clonando as existentes
pyenv permite que você instale versões diferentes do python simultaneamente (em todo o sistema ou apenas para o usuário local) e, em seguida, escolha qual a multidão de pythons a serem executados a qualquer momento (incluindo os criados pelo virtualenv ou Anaconda)