Lorsque, dans un virtualenv le code personnalisé aller?
Ce genre de structure de répertoire doit-on suivre lors de l'utilisation de virtualenv
? Par exemple, si j'ai été de construire une application WSGI et créé un virtualenv appelé foobar
je voudrais commencer par une structure de répertoire:
/foobar
/bin
{activate, activate.py, easy_install, python}
/include
{python2.6/...}
/lib
{python2.6/...}
Une fois cet environnement est créé, où serait-on dans un lieu qui leur est propre:
- fichiers python?
- des fichiers statiques (images, etc)?
- "personnalisé" paquets, tels que ceux disponibles en ligne, mais pas trouvé dans le fromage-shop?
par rapport à la virtualenv
répertoires?
(À supposer que je sais déjà où le virtualenv répertoires eux-mêmes devrait aller.)
- Je suis en désaccord. Comment vous disposition une application python est une question distincte de la façon dont vous recherchez l'application dans un virtualenv à des fins de développement. C'est lié, mais pas la même. Merci de ne pas fermer les doublons.
Vous devez vous connecter pour publier un commentaire.
virtualenv
fournit un interpréteur python, par exemple, pas une instance de l'application. Vous n'auriez pas normalement créer les fichiers de votre application dans les répertoires contenant un système par défaut de Python, de même il n'y a aucune exigence pour localiser votre demande dans un virtualenv répertoire.Par exemple, vous pourriez avoir un projet pour lequel vous disposez de plusieurs applications utilisant la même virtualenv. Ou, vous avez peut-être tester une application avec un virtualenv qui sera par la suite déployé avec un système de Python. Ou, vous avez peut-être empaquetage d'une application autonome où il pourrait être utile d'avoir le virtualenv répertoire situé quelque part dans le répertoire app elle-même.
Donc, en général, je ne pense pas qu'il y est une seule bonne réponse à la question. Et, une bonne chose à propos de
virtualenv
est qu'il prend en charge de nombreux différents cas d'utilisation: il n'a pas besoin d'être un droit chemin.virtualenvwrapper
), c'est quand je veux modifier lapostactivate
etpostdeactivate
crochets.virtualenv
répertoire, mais en comparantvirtualenv
de système de python est inutile, parce que le but devirtualenv
est de fixer des dépendances cassées et d'isoler les projets, de sorte qu'ils peuvent utiliser différentes versions de package et même les versions de python (je me rends compte que ceci a été écrit avant python3). Permettant aux applications de partager unvirtualenv
est à l'aide devirtualenv
comme si c'était le système de python, en laissant les applications vulnérables aux mêmes questions virtualenv est conçu pour les résoudre.There should be one obvious way to do it
, logiquement cela devrait être de 1:1Si vous n'avez que quelques projets de chaque tellement souvent, rien ne vous empêche de créer un nouveau virtualenv pour chacun d'eux, et de mettre vos paquets à l'intérieur:
L'avantage de cette approche est que vous pouvez toujours être sûr de trouver des trouver des les activer script qui appartient à la projet à l'intérieur.
Si vous décidez d'être un peu plus organisé, vous devriez envisager de mettre tous vos virtualenvs dans un dossier, et le nom de chacun d'eux après le projet sur lequel vous travaillez.
De cette façon, vous pouvez toujours recommencer avec une nouvelle virtualenv quand les choses vont mal, et vos fichiers de projet à rester en sécurité.
Un autre avantage est que plusieurs de vos projets peuvent utiliser le même virtualenv, de sorte que vous n'avez pas à faire la même installation de plus de et plus si vous avez beaucoup de dépendances.
Pour les utilisateurs qui ont régulièrement à installer et à démonter virtualenvs il serait judicieux de regarder à virtualenvwrapper.
Avec virtualenvwrapper vous pouvez
Vous ne plus avoir à vous soucier de l'endroit où votre virtualenvs sont lorsque vous travaillez sur des projets "foo" et "bar":
C'est une façon de commencer à travailler sur le projet "foo":
Puis en passant au projet "bar" est aussi simple que cela:
Assez soignée, n'est-ce pas?
virtualenvwrapper
. Il parfaitement résumés de la virtualenv loin tout en vous offrant tous les avantages.venv/
répertoire au même niveau que le projet deBASE_DIR
.Parce que virtualenvs ne sont pas délocalisables, à mon avis c'est une mauvaise pratique de placer vos fichiers de projet à l'intérieur d'un virtualenv répertoire. Le virtualenv lui-même est un générés développement/déploiement de l'artefact (un peu comme un .pyc fichier), ne fait pas partie du projet; il devrait être facile de l'emporter et de le recréer à tout moment, ou en créer un nouveau sur une nouvelle déployer d'accueil, etc.
Beaucoup de gens en fait, l'utilisation de virtualenvwrapper, qui supprime le réel virtualenvs de votre conscience presque complètement, en les plaçant tous les côte-à-côte dans $HOME/.virtualenvs par défaut.
virtualenv --relocatable myvenv
voir stackoverflow.com/a/6628642/1335793 tout simplement parce que vous pouvez ne signifie pas que vous devriez bien.Si vous donner à votre projet une
setup.py
, pep, vous pouvez l'importer à partir de la version de contrôle directement.Faire quelque chose comme ceci:
La
-e
va mettre le projet enmyproject/src
, mais le lien demyproject/lib/pythonX.X/site-packages/
, afin que toutes les modifications que vous apportez seront ramassés immédiatement dans des modules que l'importer à partir de votre localsite-packages
. Le#egg
bit indique pip quel nom que vous souhaitez donner à l'œuf paquet qu'elle crée pour vous.Si vous n'utilisez pas
--no-site-packages
, veillez à spécifier que vous souhaitez pip à installer dans le virtualenv avec le-E
option