Que tipo de estrutura de diretório deve-se seguir ao usar virtualenv
? Por exemplo, se eu estivesse construindo um aplicativo WSGI e criasse um virtualenv chamado foobar
, começaria com uma estrutura de diretório como:
/foobar
/bin
{activate, activate.py, easy_install, python}
/include
{python2.6/...}
/lib
{python2.6/...}
Depois de criar esse ambiente, onde alguém colocaria o seu próprio:
- arquivos python?
- arquivos estáticos (imagens / etc)?
- Pacotes "personalizados", como os disponíveis online mas não encontrados na loja de queijos?
em relação aos virtualenv
diretórios?
(Suponha que eu já saiba para onde os próprios diretórios virtualenv devem ir .)
python
project
virtualenv
Phillip B Oldham
fonte
fonte
Respostas:
virtualenv
fornece uma instância do interpretador Python, não uma instância do aplicativo. Normalmente, você não criaria seus arquivos de aplicativo nos diretórios que contêm o Python padrão de um sistema, da mesma forma, não há necessidade de localizar seu aplicativo em um diretório virtualenv.Por exemplo, você pode ter um projeto em que vários aplicativos usam o mesmo virtualenv. Ou você pode estar testando um aplicativo com um virtualenv que mais tarde será implantado com um sistema Python. Ou você pode estar empacotando um aplicativo autônomo em que faça sentido ter o diretório virtualenv localizado em algum lugar dentro do próprio diretório do aplicativo.
Portanto, em geral, não acho que haja uma resposta certa para a pergunta. E, uma coisa boa
virtualenv
é que ele oferece suporte a muitos casos de uso diferentes: não precisa haver um caminho certo.fonte
virtualenvwrapper
) é quando eu quero editar opostactivate
epostdeactivate
ganchos.virtualenv
diretório, mas compararvirtualenv
com o sistema python é inútil, porque o objetivovirtualenv
é consertar dependências quebradas e isolar projetos para que eles possam usar diferentes versões de pacote e até mesmo versões de python (eu percebo que isso foi escrito antes -python3). Permitir que os aplicativos compartilhem umvirtualenv
é usarvirtualenv
como se fosse python do sistema, deixando os aplicativos vulneráveis aos mesmos problemas que o virtualenv foi projetado para resolver.There should be one obvious way to do it
; logicamente, deve ser 1: 1Se você tem apenas alguns projetos de vez em quando, nada o impede de criar um novo virtualenv para cada um e colocar seus pacotes dentro:
A vantagem dessa abordagem é que você sempre pode ter certeza de encontrar o script de ativação que pertence ao projeto.
Se você decidir ser um pouco mais organizado, deve considerar colocar todos os seus virtuaisenvs em uma pasta e nomear cada um deles com o nome do projeto em que está trabalhando.
Dessa forma, você sempre pode recomeçar com um novo virtualenv quando algo der errado e seus arquivos de projeto permanecerem seguros.
Outra vantagem é que vários de seus projetos podem usar o mesmo virtualenv, portanto, você não precisa fazer a mesma instalação repetidamente se tiver muitas dependências.
Para usuários que regularmente precisam configurar e desmontar o virtualenvs, faria sentido examinar o virtualenvwrapper.
Com o virtualenvwrapper você pode
Você não precisa mais se preocupar com a localização do seu virtualenvs ao trabalhar nos projetos "foo" e "bar":
É assim que você começa a trabalhar no projeto "foo":
Então, mudar para o projeto "bar" é tão simples quanto isto:
Muito legal, não é?
fonte
virtualenvwrapper
. Ele abstrai perfeitamente o virtualenv, ao mesmo tempo que oferece todos os benefícios.venv/
diretório no mesmo nível do projetoBASE_DIR
.Como os virtuaisenvs não são realocáveis, na minha opinião é uma prática ruim colocar os arquivos do projeto dentro de um diretório virtualenv. O virtualenv em si é um artefato de desenvolvimento / implantação gerado (como um arquivo .pyc), não faz parte do projeto; deve ser fácil explodi-lo e recriá-lo a qualquer momento ou criar um novo em um novo host de implantação, etc.
Na verdade, muitas pessoas usam o virtualenvwrapper , que remove o virtualenvs real de sua consciência quase completamente, colocando-os lado a lado em $ HOME / .virtualenvs por padrão.
fonte
virtualenv --relocatable myvenv
consulte stackoverflow.com/a/6628642/1335793 só porque você pode, não significa que deveria.Se você der ao seu projeto um
setup.py
, pip pode importá-lo diretamente do controle de versão.Faça algo assim:
O
-e
irá colocar o projetomyproject/src
, mas vinculá-lo amyproject/lib/pythonX.X/site-packages/
, portanto, quaisquer alterações feitas serão coletadas imediatamente nos módulos que o importam de seu localsite-packages
. O#egg
bit diz a pip qual nome você deseja dar ao pacote de ovos que ele cria para você.Se você não usar
--no-site-packages
, tenha o cuidado de especificar que deseja que o pip seja instalado no virtualenv com a-E
opçãofonte