O Python 3.3 inclui em sua biblioteca padrão o novo pacote venv
. O que faz e como difere de todos os outros pacotes que parecem corresponder ao regex (py)?(v|virtual|pip)?env
?
1025
O Python 3.3 inclui em sua biblioteca padrão o novo pacote venv
. O que faz e como difere de todos os outros pacotes que parecem corresponder ao regex (py)?(v|virtual|pip)?env
?
virtualenv
epyenv
não executam a mesma função e não são alternativas uma para a outra. Veja minha resposta.Respostas:
Pacotes PyPI que não estão na biblioteca padrão:
virtualenv
é uma ferramenta muito popular que cria ambientes Python isolados para bibliotecas Python. Se você não estiver familiarizado com essa ferramenta, recomendo aprendê-la, pois é uma ferramenta muito útil, e farei comparações com ela pelo restante desta resposta.Ele funciona instalando um monte de arquivos em um diretório (por exemplo
env/
:) e modificando aPATH
variável de ambiente para prefixá-la com umbin
diretório personalizado (por exemploenv/bin/
:). Uma cópia exata dopython
oupython3
binário é colocada nesse diretório, mas o Python é programado para procurar bibliotecas relativas ao seu caminho primeiro, no diretório do ambiente. Ele não faz parte da biblioteca padrão do Python, mas é oficialmente abençoado pelo PyPA (Python Packaging Authority). Uma vez ativado, você pode instalar pacotes no ambiente virtual usandopip
.pyenv
é usado para isolar versões do Python. Por exemplo, você pode testar seu código em Python 2.7, 3.6, 3.7 e 3.8, portanto precisará de uma maneira de alternar entre eles. Uma vez ativado, ele prefixa aPATH
variável de ambiente com~/.pyenv/shims
, onde existem arquivos especiais correspondentes aos comandos do Python (python
,pip
). Essas não são cópias dos comandos fornecidos pelo Python; eles são scripts especiais que decidem rapidamente qual versão do Python executar com base naPYENV_VERSION
variável de ambiente, no.python-version
arquivo ou no~/.pyenv/version
arquivo.pyenv
também torna o processo de baixar e instalar várias versões do Python mais fácil, usando o comandopyenv install
.pyenv-virtualenv
é um plugin criadopyenv
pelo mesmo autor quepyenv
, para permitir o usopyenv
evirtualenv
ao mesmo tempo convenientemente. No entanto, se você estiver usando o Python 3.3 ou posterior,pyenv-virtualenv
tentará executarpython -m venv
se estiver disponível, em vez devirtualenv
. Você pode usarvirtualenv
e empyenv
conjunto sempyenv-virtualenv
, se não quiser os recursos de conveniência.virtualenvwrapper
é um conjunto de extensões paravirtualenv
(consulte a documentação ). Dá-lhe comandos comomkvirtualenv
,lssitepackages
e, especialmente,workon
para alternar entre diferentesvirtualenv
diretórios. Essa ferramenta é especialmente útil se você deseja váriosvirtualenv
diretórios.pyenv-virtualenvwrapper
é um plugin parapyenv
pelo mesmo autor comopyenv
, para integrar convenientementevirtualenvwrapper
empyenv
.pipenv
pretende combinarPipfile
,pip
evirtualenv
em um comando na linha de comando. Ovirtualenv
diretório normalmente é colocado~/.local/share/virtualenvs/XXX
,XXX
sendo um hash do caminho do diretório do projeto. Isso é diferente devirtualenv
, onde o diretório normalmente está no diretório de trabalho atual.pipenv
deve ser usado no desenvolvimento de aplicativos Python (ao contrário de bibliotecas). Existem alternativas parapipenv
, comopoetry
, que não listarei aqui, já que esta pergunta é apenas sobre os pacotes com nomes semelhantes.Biblioteca padrão:
pyvenv
é um script fornecido com o Python 3, mas reprovado no Python 3.6 , pois apresentava problemas (sem mencionar o nome confuso). No Python 3.6+, o equivalente exato épython3 -m venv
.venv
é um pacote enviado com o Python 3, que você pode executar usandopython3 -m venv
(embora por alguma razão algumas distribuições o separem em um pacote de distribuição separado, comopython3-venv
no Ubuntu / Debian). Ele serve ao mesmo propósito quevirtualenv
, mas possui apenas um subconjunto de seus recursos ( veja uma comparação aqui ).virtualenv
continua a ser mais popular do quevenv
, especialmente porque o primeiro suporta Python 2 e 3.Recomendação para iniciantes:
Esta é minha recomendação pessoal para iniciantes: comece aprendendo
virtualenv
epip
, ferramentas que funcionam com o Python 2 e 3 e em uma variedade de situações, e escolha outras ferramentas assim que começar a precisar delas.fonte
venv
realmente resolveu esse problema?venv
você pode atualizar para uma nova versão do Python mais facilmente.Gostaria apenas de evitar o uso de
virtualenv
após o Python3.3 + e, em vez disso, usar a biblioteca padrão fornecidavenv
. Para criar um novo ambiente virtual, digite:virtualenv
tenta copiar o binário Python no diretório bin do ambiente virtual. No entanto, ele não atualiza os links dos arquivos da biblioteca incorporados nesse binário, portanto, se você criar o Python da origem em um diretório que não seja do sistema com nomes de caminho relativos, o binário do Python será interrompido. Como é assim que você cria uma cópia Python distribuível, é uma grande falha. Para inspecionar os links dos arquivos da biblioteca incorporada no OS X, useotool
. Por exemplo, de dentro do seu ambiente virtual, digite:Consequentemente, eu evitaria
virtualenvwrapper
epipenv
.pyvenv
está obsoleto.pyenv
parece ser usado frequentemente ondevirtualenv
é usado, mas eu também ficaria longe disso, já que acho quevenv
também faz o quepyenv
foi construído.venv
cria ambientes virtuais no shell que são novos e em área restrita , com bibliotecas instaláveis pelo usuário e é seguro para vários python . Novo porque os ambientes virtuais começam apenas com as bibliotecas padrão fornecidas com python, você precisa instalar outras bibliotecas novamentepip install
enquanto o ambiente virtual estiver ativo. Em área restrita porque nenhuma dessas novas instalações de biblioteca é visível fora do ambiente virtual, para que você possa excluir todo o ambiente e começar de novo sem se preocupar com o impacto na instalação básica do python. Bibliotecas instaláveis pelo usuário porque a pasta de destino do ambiente virtual é criada semsudo
em algum diretório que você já possui, portanto não precisará desudo
permissões para instalar bibliotecas nele. Por fim, é seguro para vários tipos de python , pois quando os ambientes virtuais são ativados, o shell vê apenas a versão em python (3.4, 3.5 etc.) usada para criar esse ambiente virtual.pyenv
é semelhante aovenv
permitir gerenciar vários ambientes python. No entanto,pyenv
você não pode reverter convenientemente as instalações da biblioteca para algum estado inicial e provavelmente precisará deadmin
privilégios em algum momento para atualizar as bibliotecas. Então eu acho que também é melhor usarvenv
.Nos últimos anos, eu encontrei muitos problemas nos sistemas de compilação (pacotes emacs, construtores de aplicativos autônomos python, instaladores ...) que acabam por resolver problemas
virtualenv
. Eu acho que o python será uma plataforma melhor quando eliminarmos essa opção adicional e usarmos apenasvenv
.fonte
add2virtualenv
ajusta o seuPYTHONPATH
adicionando um_virtualenv_path_extensions.pth
arquivo personalizado emsite-packages
. Como alternativa, você pode atualizar aPYTHONPATH
variável de ambiente nobin/activate
arquivo que chama sempre que ativar o ambiente virtual. Ou você pode adicionar links simbólicos abaixosite-packages
para apontar para os diretórios extras. Ambas as alternativas são mais transparentes às ferramentas tradicionais de linha de comando que os desenvolvedores usam amplamente para solucionar problemas. O uso de um costume.pth
com um nome não documentado faz com que pareça IMO mais mágico.PYTHONPATH
evita a necessidadeadd2virtualenv
. Com relação à falta de ajuda no SO desde o seu primeiro comentário, minha única sugestão é que as respostas sejam positivas se eles resolverem o seu problema, para motivar as pessoas a solucionar problemas quando você postar? Meia hora de investigação + redação em troca de um clique do mouse? Soa como um bom comércio ...pyvenv
que está obsoleto, nãopyenv
. É tão fácil ficar confuso com os nomes dessas ferramentas.pipenv
Desci na toca do coelho ( é realmente um buraco escuro e profundo ... ) e, como a última resposta foi há mais de 2 anos , achei útil atualizar a discussão com os desenvolvimentos mais recentes sobre o tópico de envelopes virtuais do Python I encontrei.AVISO LEGAL:
Essa resposta NÃO é sobre continuar o debate acirrado sobre os méritos de pipenv versus venv como soluções-envelope - também não endosso . É sobre PyPA aprovação de normas conflitantes e como o desenvolvimento futuro da VIRTUALENV promessas para negar fazer um ou / ou escolha entre eles em tudo. Eu me concentrei nessas duas ferramentas justamente porque elas são as ungidas pelo PyPA .
venv
Como observa o OP, o venv é uma ferramenta para ambientes de virtualização. NÃO é uma solução de terceiros, mas uma ferramenta nativa. O PyPA endossa o venv pela criação de VIRTUAL ENVELOPES : " Alterado na versão 3.5: O uso do venv agora é recomendado para a criação de ambientes virtuais ".
pipenv
O pipenv - como o venv - pode ser usado para criar envelopes virtuais, mas também oferece funcionalidade degerenciamento de pacotes e verificação de vulnerabilidades . Em vez de usar
requirements.txt
,pipenv
fornece gerenciamento de pacotes via Pipfile . À medida que o PyPA apóia o pipenv para GESTÃO DE PACOTES , isso parece implicarpipfile
em suplantarrequirements.txt
.NO ENTANTO : o pipenv usa o virtualenv como sua ferramenta para criar envelopes virtuais, NÃO o venv, que é endossado pelo PyPA como a ferramenta principal para a criação de envelopes virtuais.
Padrões conflitantes:
Portanto, se a escolha de uma solução de envelope virtual não fosse suficientemente difícil, agora temos o PyPA endossando duas ferramentas diferentes que usam soluções diferentes de envelope virtual. O debate intenso do Github sobre venv vs virtualenv, que destaca esse conflito, pode ser encontrado aqui .
Resolução de Conflitos:
O debate no Github mencionado no link acima orientou o desenvolvimento do virtualenv na direção de acomodar o venv em versões futuras :
Conclusão:
Portanto, parece que haverá alguma convergência futura entre as duas soluções rivais de envelope virtual, mas a partir de agora o pipenv - que usa
virtualenv
- varia materialmentevenv
.Dados os problemas resolvidos pela pipenv e o fato de o PyPA ter dado sua bênção, ele parece ter um futuro brilhante. E se o virtualenv cumpre seus objetivos de desenvolvimento propostos, a escolha de uma solução de envelope virtual não deve mais ser um caso de pipenv OU venv .
fonte
Atualização de abril de 2020
Eu estava procurando o mesmo quando me deparei com este post . Eu acho que essa questão de qual ferramenta usar é bastante confusa e difícil para novos usuários de Python como eu. Isso é diretamente do site do PyPA sobre o pipenv:
fonte
pipenv
equipe lançou duas versões para o PyPI:2020.5.28
e, mais recentemente,2020.6.2
: pypi.org/project/pipenv/#history