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.