Onde o virtualenvs deve ser criado?


107

Estou confuso sobre onde devo colocar meu virtualenvs.

Com meu primeiro projeto de django, criei o projeto com o comando

django-admin.py startproject djangoproject

Em seguida, fiz cd para o diretório djangoproject e executei o comando

virtualenv env

que criou o diretório do ambiente virtual no mesmo nível do djangoprojectdiretório interno .

Este é o lugar errado para criar o virtualenv para este projeto específico?

Estou tendo a impressão de que a maioria das pessoas mantém todos os seus virtuaisenvs juntos em um diretório totalmente diferente, por exemplo ~/virtualenvs, e usam o virtualenvwrapper para alternar entre eles.

Existe uma maneira correta de fazer isso?

Respostas:


128

Muitas pessoas usam a ferramenta virtualenvwrapper , que mantém todos os virtualenvs no mesmo lugar (o ~/.virtualenvsdiretório) e permite atalhos para criá-los e mantê-los lá. Por exemplo, você pode fazer:

mkvirtualenv djangoproject

e depois:

workon djangoproject

Provavelmente não é uma boa ideia manter o diretório virtualenv no próprio projeto, pois você não deseja distribuí-lo (pode ser específico para o seu computador ou sistema operacional). Em vez disso, mantenha um arquivo requirements.txt usando pip :

pip freeze > requirements.txt

e distribuir isso. Isso permitirá que outros usuários do seu projeto reinstalem todos os mesmos requisitos em seu virtualenv com:

pip install -r requirements.txt

bom, eu nunca tinha olhado para o material de pip, mas se eu precisar algum dia isso vai ser útil
— Joran Beasley

pip é muito popular na comunidade Django e muito fácil de usar.
— David Robinson

Obrigado David, foi isso que pensei. Eu sabia sobre os requisitos e estou fazendo isso. Só não tinha certeza sobre para onde o venv deveria ir. Seu comentário sobre ser específico do SO é uma boa justificativa para fazer o que você sugere.
— Ray

É possível mover um ambiente virtual após sua criação? Sem querer, coloquei-o no diretório do meu projeto
— James Wierzba

6
Não é uma grande justificativa OMI. Não é para isso que serve .gitignore?
— Josh Noe

24

Alterar a localização do diretório virtualenv o quebra

Esta é uma vantagem de colocar o diretório fora da árvore do repositório, por exemplo, em ~/.virtualenvscom virutalenvwrapper.

Caso contrário, se você mantê-lo na árvore do projeto, mover a localização do projeto interromperá o virtualenv.

Veja: Renomeando uma pasta virtualenv sem quebrá-la

Existe, --relocatablemas sabe-se que não é perfeito.

Outra vantagem secundária: você não precisa .gitignore.

As vantagens de colocá-lo gitignored na própria árvore do projeto são:

  • mantém as coisas relacionadas juntas.
  • você provavelmente nunca reutilizará um determinado virtualenv entre projetos, então colocá-lo em outro lugar não dá muita vantagem

3
Este é o único argumento razoável que vi para criar pastas virtualenv fora das árvores do projeto! Outra orientação parece apenas repetir o dogma da 'centralização' como se fosse inerentemente uma melhor prática, em vez de um infeliz compromisso devido ao virtualenvs ser fundamentalmente quebrado (embora bastante útil!).
— rob3c de

Desculpe, algo não está claro para mim, então você recomenda criá-lo na árvore do projeto e, em seguida, "gitignorá-lo" ou criá-lo no ~ / .virtualenvs? A que se refere "Se não fosse por isso"?
— aderchox

1
@aderchox há uma desvantagem: coloque-o na árvore do projeto e você terá que reinstalar, ou coloque-o ~ mas gerencie em um subdiretório extra fora do projeto.
— Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功


0

Se você usar pyenv install Python, pyenv-virtualenv será uma prática recomendada. Se definir o .python-versionarquivo, ele pode ativar ou desativar automaticamente o ambiente virtual quando você mudar a pasta de trabalho. Pyenv-virtualenvtambém coloque todos os env virtuais na $HOME/.pyenv/versionspasta.


0

Pela minha experiência pessoal, eu recomendaria organizar todos os ambientes virtuais em um único diretório. A menos que alguém tenha memória extremamente nítida e possa lembrar de arquivos / pastas espalhados pelo sistema de arquivos. Não é um grande fã de usar outras ferramentas apenas para gerenciar ambientes virtuais. No VSCode, se eu configurar ( python.venvPath) o diretório contendo todos os ambientes virtuais, ele pode reconhecer automaticamente todos eles.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.