Recentemente, aprendi a usar o virtualenv e o virtualenvwrapper no meu fluxo de trabalho, mas vi o pyenv mencionado em alguns guias, mas não consigo entender o que é pyenv e como é diferente / semelhante ao virtualenv. O pyenv é um substituto melhor / mais recente para o virtualenv ou uma ferramenta complementar? Neste último caso, o que faz de diferente e como os dois (e o virtualenvwrapper, se aplicável) funcionam juntos?
python
virtualenv
virtualenvwrapper
pyenv
truth1ness
fonte
fonte
pyenv
confunda com #pyvenv
Respostas:
Pyenv e virtualenv são ferramentas muito diferentes que funcionam de maneiras diferentes para fazer coisas diferentes:
O Pyenv é uma extensão do bash - não funciona no Windows - que intercepta suas chamadas para python, pip, etc., para direcioná-las a uma das várias cadeias de ferramentas python do sistema. Portanto, você sempre tem disponíveis todas as bibliotecas que instalou na versão python selecionada - portanto, é bom para usuários que precisam alternar entre versões diferentes do python.
O VirtualEnv , é um python puro, portanto funciona em todos os lugares; copia, opcionalmente , uma versão específica de python e pip local para o ambiente de ativação que pode ou não incluir links para a cadeia de ferramentas do sistema atual, caso contrário instale apenas um subconjunto conhecido de bibliotecas nesse ambiente. Como tal, é quase certamente muito melhor para teste e implantação, pois você sabe exatamente quais bibliotecas, em quais versões são usadas e uma mudança global não afetará seu módulo.
venv python> 3.3
Observe que a partir do Python 3.3 em diante, há uma implementação incorporada do VirtualEnv chamada venv (com, em algumas instalações, um wrapper chamado pyvenv - esse wrapper está obsoleto no Python 3.6 ), que provavelmente deve ser usado de preferência. Para evitar possíveis problemas com o wrapper, geralmente é uma boa ideia usá-lo diretamente usando
/path/to/python3 -m venv desired/env/path
ou você pode usar o excelentepy
seletor python no Windows compy -3 -m venv desired/env/path
. Ele criará o diretório especificado comdesired/env/path
configure e o preencherá adequadamente. Em geral, é muito parecido com o uso do VirtualEnv.Ferramentas Adicionais
Vale a pena mencionar várias ferramentas e considerar, pois elas podem ajudar no uso de um ou mais dos itens acima:
fonte
venv
agora, na biblioteca padrão?virtualenv
permite 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ópriopython
(ou até vários) sob o respectivo virtualenv. É perfeitamente aceitável que alguns / todos os virtualvvs tenham a mesma versãopython
(por exemplo, 2.7.16) sem conflito - eles vivem separadamente e não se conhecem. Se você deseja usar qualquer um dessespython
s, é necessárioactivate
(executando um script que modificará temporariamente o seuPATH
para garantir que obin/
diretório do virtualenv seja o primeiro). A partir desse ponto, chamarpython
(oupip
etc.) chamará a versão do virtualenv até vocêdeactivate
(que restaura aPATH
).pyenv
opera em uma escala mais ampla do quevirtualenv
- 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 opython
comando. Soa semelhante, mas o uso prático é um pouco diferente. Ele funciona anexando seupython
script shim ao seuPATH
(permanentemente) e depois decidindo qual "real"python
chamar. Você pode até configurar o pyenv para chamar um dos pythons do virtualenv (usando opyenv-virtualenv
plug - in). As versões Python que você instala usandopyenv
entram 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 instaladaspyenv
, 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
PATH
ou não) e essencialmente cloná-la no seu virtualenv recém-criado. Obviamente, uma maneira de obter uma versão específica é instalá-la viapyenv
. 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 existentespyenv
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)fonte