Não tenho muita certeza se esse é um comportamento esperado, mas do ponto de vista de uso, isso parece ser um bug:
pipenv install <package_name>
está criando um novo virtualenv, embora o virtualenv seja ativado usando pipenv shell
.
se não estivermos no mesmo diretório onde Pipfile
está localizado.
$ python -V
== 3.6.3$ pipenv --version
== versão 8.3.1Se estivermos em um shell virtualenv ativado, (independentemente do pwd
) pipenv install
deve respeitá-lo e atualizar corretamente o Pipfile
e não deve criar um novo Pipfile
.
Um novo Pipfile é criado, mesmo se no mesmo virtualenv ativado, mas em um diretório diferente.
$ mkdir -p testproject/app
$ cd testproject/app
$ pipenv install flask
$ pipenv shell # environment gets activated here
$ <my_new_environment>$ cd .. # Now we are inside testproject
$ pipenv install requests
$ New Pipfile gets created here
Oi @ansrivas! Este não é o fluxo pretendido de pipenv. O Pipenv usará um ambiente virtual se se encontrar em um inicialmente, mas não em todas as chamadas subsequentes. Você teria um ninho de virtualenvs bastante peludo! Se você navegar para uma pasta que está fora do projeto, o pipenv criará um novo pipfile. Se você quiser apenas instalar alguns pacotes fora da pasta, mas dentro do ambiente virtual que você ativou no subshell, você pode fazer pipenv shell
e então pip install requests
. Pipenv pode ser usado para criar um virtualenv para o seu projeto, mas ele por si só não é um gerenciador de virtualenv, é um gerente de projeto.
@erinxocon E
O próprio @kennethreitz disse na página inicial do pipenv:
Você não precisa mais usar pip e virtualenv separadamente. Eles trabalham juntos.
pipenv deve não apenas criar o virtualenv, como você disse, mas também gerenciá- lo. Novamente, é mencionado explicitamente na página inicial (ênfase minha):
Ele cria e gerencia automaticamente um virtualenv para seus projetos, bem como adiciona / remove pacotes de seu Pipfile conforme você instala / desinstala pacotes.
Antigamente, quando usávamos virtualenv e pip separadamente, podíamos navegar para qualquer diretório e pip install
, e o pacote seria instalado corretamente no virtualenv, o fato de que pipenv não faz isso _enquanto um pipenv -managed virtualenv is enabled_ quebra a expectativa do usuário.
Estou concordando com @ksze sobre isso.
Há uma expectativa de que pipenv
deve gerenciar o virtualenv ativo.
Seguindo linhas semelhantes ... Devo ser capaz de usar o -r
para instalar um Pipfile externo ou Pipenv.lock no virtualenv atual, e não criar outro.
Comentários muito úteis
@erinxocon E
O próprio @kennethreitz disse na página inicial do pipenv:
pipenv deve não apenas criar o virtualenv, como você disse, mas também gerenciá- lo. Novamente, é mencionado explicitamente na página inicial (ênfase minha):
Antigamente, quando usávamos virtualenv e pip separadamente, podíamos navegar para qualquer diretório e
pip install
, e o pacote seria instalado corretamente no virtualenv, o fato de que pipenv não faz isso _enquanto um pipenv -managed virtualenv is enabled_ quebra a expectativa do usuário.