Quelle sorte de structure de répertoire doit-on suivre lors de l'utilisation virtualenv
? Par exemple, si je construisais une application WSGI et créais un virtualenv appelé, foobar
je commencerais par une structure de répertoires comme:
/foobar
/bin
{activate, activate.py, easy_install, python}
/include
{python2.6/...}
/lib
{python2.6/...}
Une fois cet environnement créé, où placerait-on le leur:
- fichiers python?
- fichiers statiques (images / etc)?
- des forfaits "personnalisés", comme ceux disponibles en ligne mais introuvables dans la fromagerie?
par rapport aux virtualenv
répertoires?
(Supposons que je sache déjà où les répertoires virtualenv eux-mêmes devraient aller .)
python
project
virtualenv
Phillip B Oldham
la source
la source
Réponses:
virtualenv
fournit une instance d'interpréteur python, pas une instance d'application. Vous ne créeriez normalement pas vos fichiers d'application dans les répertoires contenant le Python par défaut d'un système, de même qu'il n'est pas nécessaire de localiser votre application dans un répertoire virtualenv.Par exemple, vous pouvez avoir un projet dans lequel vous avez plusieurs applications utilisant le même virtualenv. Ou, vous testez peut-être une application avec un virtualenv qui sera ensuite déployé avec un système Python. Ou, vous pouvez créer une application autonome dans laquelle il peut être judicieux de placer le répertoire virtualenv quelque part dans le répertoire de l'application lui-même.
Donc, en général, je ne pense pas qu'il y ait une seule bonne réponse à la question. Et, une bonne chose à ce sujet
virtualenv
est qu'il prend en charge de nombreux cas d'utilisation différents: il n'est pas nécessaire qu'il y ait un seul bon moyen.la source
virtualenvwrapper
) est quand je veux modifier lespostactivate
etpostdeactivate
crochets.virtualenv
répertoire, mais la comparaisonvirtualenv
avec le système python n'est pas utile, car le but devirtualenv
est de corriger les dépendances brisées et d'isoler les projets afin qu'ils puissent utiliser différentes versions de package et même des versions python (je me rends compte que cela a été écrit avant -python3). Permettre aux applications de partager unvirtualenv
utilisevirtualenv
comme s'il s'agissait de python système, laissant les applications vulnérables aux mêmes problèmes que virtualenv est conçu pour résoudre.There should be one obvious way to do it
; logiquement, cela devrait être 1: 1Si vous n'avez que quelques projets de temps en temps, rien ne vous empêche de créer une nouvelle virtualenv pour chacun et de placer vos packages directement à l'intérieur:
L'avantage de cette approche est que vous pouvez toujours être sûr de trouver le script d'activation qui appartient au projet à l'intérieur.
Si vous décidez d'être un peu plus organisé, vous devriez envisager de mettre tous vos virtualenv dans un seul dossier et de nommer chacun d'eux d'après le projet sur lequel vous travaillez.
De cette façon, vous pouvez toujours recommencer avec une nouvelle virtualenv lorsque les choses tournent mal, et vos fichiers de projet restent en sécurité.
Un autre avantage est que plusieurs de vos projets peuvent utiliser le même virtualenv, vous n'avez donc pas à refaire la même installation encore et encore si vous avez beaucoup de dépendances.
Pour les utilisateurs qui doivent régulièrement configurer et supprimer des virtualenvs, il serait logique de regarder virtualenvwrapper.
Avec virtualenvwrapper, vous pouvez
Vous n'avez plus à vous soucier de la localisation de vos virtualenvs lorsque vous travaillez sur les projets "foo" et "bar":
Voici comment vous commencez à travailler sur le projet "foo":
Ensuite, passer au projet "bar" est aussi simple que ceci:
Assez bien, n'est-ce pas?
la source
virtualenvwrapper
. Il fait abstraction du virtualenv tout en vous offrant tous les avantages.venv/
répertoire au même niveau que celui du projetBASE_DIR
.Étant donné que les virtualenv ne sont pas déplaçables, à mon avis, il est déconseillé de placer vos fichiers de projet dans un répertoire virtualenv. Le virtualenv lui-même est un artefact de développement / déploiement généré (un peu comme un fichier .pyc), qui ne fait pas partie du projet; il devrait être facile de le souffler et de le recréer à tout moment, ou d'en créer un nouveau sur un nouvel hôte de déploiement, etc.
Beaucoup de gens utilisent en fait virtualenvwrapper , qui supprime presque complètement les virtualenvs réels de votre conscience, les plaçant tous côte à côte dans $ HOME / .virtualenvs par défaut.
la source
virtualenv --relocatable myvenv
voir stackoverflow.com/a/6628642/1335793 simplement parce que vous pouvez ne pas dire que vous devriez cependant.Si vous attribuez un a à votre projet
setup.py
, pip peut l'importer directement depuis le contrôle de version.Faites quelque chose comme ceci:
Le
-e
mettra le projet dansmyproject/src
, mais le lieramyproject/lib/pythonX.X/site-packages/
, donc toutes les modifications que vous apportez seront immédiatement prises en compte dans les modules qui l'importent depuis votre fichier localsite-packages
. Le#egg
bit indique à pip le nom que vous voulez donner au paquet d'œufs qu'il crée pour vous.Si vous ne l'utilisez pas
--no-site-packages
, veillez à spécifier que vous souhaitez que pip s'installe dans le virtualenv avec l'-E
optionla source