Buildout et virtualenv
-
21-09-2019 - |
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
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.