Question

Quelle sorte de structure de répertoire doit-on suivre lors de l'utilisation virtualenv? Par exemple, si je devais construire une application WSGI et a créé un virtualenv appelé foobar Je commencerais avec une structure de répertoire comme:

/foobar
  /bin
    {activate, activate.py, easy_install, python}
  /include
    {python2.6/...}
  /lib
    {python2.6/...}

Une fois que cet environnement est créé, où peut-on placer leur propre:

  • fichiers python?
  • fichiers statiques (images / etc)?
  • des forfaits « personnalisés », tels que ceux disponibles en ligne, mais ne trouve pas dans le fromage-shop?

par rapport aux répertoires virtualenv?

(On suppose que je sais déjà où les répertoires virtualenv eux-mêmes devraient aller .)

Était-ce utile?

La solution

virtualenv fournit une instance de l'interpréteur python, pas une instance d'application. Vous devriez normalement pas créer vos fichiers d'application dans les répertoires contenant un python par défaut du système, de même il n'y a pas besoin de localiser votre application dans un répertoire virtualenv.

Par exemple, vous pourriez avoir un projet où vous avez plusieurs applications utilisant le même virtualenv. Ou, vous pouvez tester une application avec un virtualenv qui sera ensuite déployé avec un python de système. Ou, vous pouvez être une application conditionnez autonome où il pourrait être judicieux d'avoir le répertoire virtualenv situé quelque part dans le répertoire de l'application elle-même.

Alors, en général, je ne pense pas qu'il y ait une bonne réponse à la question. Et une bonne chose au sujet virtualenv est qu'il supporte de nombreux cas d'utilisation:. Il n'a pas besoin d'être une bonne façon

Autres conseils

Si vous avez seulement quelques projets chaque tellement souvent, rien ne vous empêche de créer une nouvelle virtualenv pour chacun d'eux, et mettre vos paquets à l'intérieur:

/foobar
  /bin
    {activate, activate.py, easy_install, python}
  /include
    {python2.6/...}
  /lib
    {python2.6/...}
  /mypackage1
    __init__.py
  /mypackage2
    __init__.py

L'avantage de cette approche est que vous pouvez toujours être sûr de trouver trouver le script activate qui appartient au projet à l'intérieur.

$ cd /foobar
$ source bin/activate
$ python 
>>> import mypackage1
>>>

Si vous décidez d'être un peu plus organisé, vous devriez envisager de mettre tous vos virtualenvs dans un seul dossier, et nommez chacun d'eux après que le projet sur lequel vous travaillez.

  /virtualenvs
    /foobar
      /bin
        {activate, activate.py, easy_install, python}
      /include
        {python2.6/...}
      /lib
        {python2.6/...}
  /foobar
    /mypackage1
      __init__.py
    /mypackage2
      __init__.py

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 ne devez pas faire la même installation encore et si vous avez beaucoup de dépendances.

$ cd /foobar
$ source ../virtualenvs/foobar/bin/activate
$ python 
>>> import mypackage2
>>>

Pour les utilisateurs qui ont régulièrement mis en place et le démontage virtualenvs il serait logique de regarder virtualenvwrapper.

http://pypi.python.org/pypi/virtualenvwrapper

Avec virtualenvwrapper vous pouvez

* create and delete virtual environments

* organize virtual environments in a central place

* easily switch between environments

Vous ne devez vous soucier de l'endroit où vos virtualenvs sont lorsque vous travaillez sur des projets « foo » et « bar »:

  /foo
    /mypackage1
      __init__.py
  /bar
    /mypackage2
      __init__.py

Voici comment commencer à travailler sur le projet "foo":

$ cd foo
$ workon
bar
foo
$ workon foo
(foo)$ python
>>> import mypackage1
>>>

passer ensuite au projet "bar" est aussi simple que cela:

$ cd ../bar
$ workon bar
(bar)$ python
>>> import mypackage2
>>>

Assez propre, est-ce pas?

Parce que virtualenvs ne sont pas délocalisables, à mon avis, il est une mauvaise pratique de placer vos fichiers de projet dans un répertoire de virtualenv. Le virtualenv lui-même est un artefact de développement / déploiement généré (un peu comme un fichier .pyc), ne fait pas partie du projet; il devrait être facile de le faire sauter loin et recréer à tout moment, ou en créer un nouveau sur un nouvel hôte de déploiement, etc.

Beaucoup de gens utilisent en fait virtualenvwrapper , qui élimine les virtualenvs réels de votre conscience presque complètement , en les plaçant tous côte à côte dans $ HOME / .virtualenvs par défaut.

Si vous donnez votre projet setup.py, pip peut importer du contrôle de version directement.

Faites quelque chose comme ceci:

$ virtualenv --no-site-packages myproject
$ . myproject/bin/activate
$ easy_install pip
$ pip install -e hg+http://bitbucket.org/owner/myproject#egg=proj

Le -e mettra le projet en myproject/src, mais le lier à myproject/lib/pythonX.X/site-packages/, donc toutes les modifications apportées ne sera pas repris immédiatement en modules importer à partir de votre site-packages local. Le bit #egg dit Pip ce nom que vous souhaitez donner à l'emballage des oeufs, il crée pour vous.

Si vous n'utilisez pas --no-site-packages, veillez à spécifier que vous voulez pip installer dans le virtualenv avec l'option -E

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top