Question

Je suis de déconner avec la combinaison de buildout et virtualenv pour configurer un isolé environnement de développement en Python qui permet de faire reproductible construit.

Il y a une recette pour buildout qui vous permet d'intégrer virtualenv dans buildout:

 tl.buildout_virtual_python

Avec ce mon buildout.cfg ressemble à ceci:

[buildout]
develop = .
parts = script
        virtualpython


[virtualpython]
recipe = tl.buildout_virtual_python
headers = true
executable-name = vp
site-packages = false

[script]
recipe = zc.recipe.egg:scripts
eggs = foo
python = virtualpython

déploiera deux executables en ./bin /:

vp
script

Quand j'exécute vp, je reçois un dialogue interactif python, isolé, comme prévu (ne peut pas charger les paquets du système). Ce que je me attends maintenant, est que si je lance

./bin/script 

que l'interpréteur python isolé est utilisé. Mais il n'a pas, ce n'est pas isolé comme « vp » est (ce qui signifie que je peux importer des bibliothèques de niveau du système). Cependant, je peux courir:

./bin/vp ./bin/script

Ce qui va exécuter le script dans un environnement isolé comme je voulais. Mais il doit y avoir un moyen de spécifier le faire sans enchaînant les commandes autrement résoud seulement la moitié buildout des problèmes que je l'espérais:)

Merci pour votre aide! Patrick

Était-ce utile?

La solution

Vous n'avez pas besoin virtualenv: buildout fournit déjà un environnement isolé, tout comme virtualenv

.

À titre d'exemple, regardez les fichiers buildout génère dans le répertoire bin. Ils ont quelque chose comme:

import sys
sys.path[0:0] = [
     '/some/thing1.egg',
     # and other things
     ]

Ainsi, le sys.path se complètement remplacé par ce buildout veut avoir sur le chemin:. La même méthode d'isolement que virtualenv

Autres conseils

zc.buildout 2.0 , puis ne fournit pas l'environnement isolé plus .

Mais virtualenv 1.9 et fournit plus tard un isolement complet (y compris de ne pas installer setuptools).

Ainsi, la meilleure façon d'obtenir un buildout dans un environnement contrôlé complet est d'exécuter les étapes suivantes (ici pour savoir Python 2.7):

cd /path/to/buildout
rm ./bin/python
/path/to/virtualenv-2.7 --no-setuptools --no-site-packages --clear .
./bin/python2.7 bootstrap.py
./bin/buildout

Préalables:

  • bootstrap.py doit être une récente correspondant à la version buildout que vous utilisez. Vous trouverez la dernière http://downloads.buildout.org/2/

  • s'il y a des broches de version dans votre buildout, assurez-vous qu'ils ne broches buildout lui-même ou des recettes / extensions versions non compatibles avec zc.buildout 2 ou version ultérieure.

question avait en cours d'exécution buildout en utilisant bootstrap sur le serveur ubuntu, à partir de là que j'utilise virtualenv Buildout ensemble. Il suffit de créer virualenv et installer buildout en elle. De cette façon, ne doit virtualenv être installé dans le système (en théorie 1 ).

$ virtualenv [options_you_might_need] virtual
$ source virtual/bin/activate
$ pip install zc.buildout
$ buildout -c <buildout.cfg>

Dites aussi à buildout de mettre ses scripts dans le répertoire virtuel / bin /, que les scripts de façon apparaissent sur $PATH.

[buildout]
bin-directory = ${buildout:directory}/virtual/bin
...

1: Dans la pratique, vous aurez probablement besoin d'œufs qu'exigez compilation au niveau du système qui nécessitent la compilation. Les œufs comme mysql ou memcache.

Je ne l'ai jamais utilisé cette recette avant, mais la première chose que je voudrais essayer est ceci:

[buildout]
develop = .
parts = script
        virtualpython


[virtualpython]
recipe = tl.buildout_virtual_python
headers = true
executable-name = vp
site-packages = false

[script]
recipe = zc.recipe.egg:scripts
eggs = foo
python = virtualpython
interpreter = vp

Si cela ne fonctionne pas, vous pouvez généralement ouvrir les scripts (dans ce cas vp et script) dans un éditeur de texte et voir les chemins Python qu'ils utilisent. Si vous êtes sur Windows, il y a généralement un fichier appelé <script_name>-script.py. Dans ce cas, ce serait vp-script.py et script-script.py.

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