Je suis déconner avec la combinaison de buildout et virtualenv pour installer un isolé environnement de développement en python qui permet de faire des builds reproductibles.Buildout et Virtualenv
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
Ce déploiera deux executables dans ./ bin /:
vp
script
Lorsque j'exécute vp, j'obtiens un dialogue python interactif et isolé, comme e xpected (ne peut charger aucun paquet 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 ce n'est pas le cas, ce n'est pas isolé car "vp" est (ce qui signifie que je peux importer des bibliothèques du niveau du système). Cependant je peux courir:
./bin/vp ./bin/script
Qui exécutera le manuscrit dans un environnement isolé comme je le souhaitais. Mais il doit y avoir un moyen de spécifier ceci sans les commandes de chaînage sinon le buildout ne résout que la moitié des problèmes que j'espérais :)
Merci pour votre aide! Patrick
La bonne chose à propos de virtualenv est qu'il modifie le chemin afin que les scripts puissent avoir "#!/usr/bin/env python "exactement comme ils sont supposés le faire et ils utiliseront la version buildout. Est-il possible de le faire sans virtualenv? – Xentac
virtualenv modifie le chemin, mais cela signifie également que vous ne devriez pas * oublier * d'activer virtualenv chaque fois que vous voulez utiliser le script. Buildout a une solution plus permanente à cet égard. Et buildout pointe la ligne "#! ..." de votre script sur le vrai python avec lequel votre build a été exécuté, donc c'est correct pour votre machine. Sans virtualenv? Vous pouvez écrire un script shell qui définit le PYTHONPATH comme quelque chose de spécifique et obtenir * quelques * fonctionnalités de virtualenv. Mais pas tous, surtout pas lors de l'installation. –
Correction rapide: 'sys.path [0: 0] = [...]' ne remplace pas complètement sys.path, il insère simplement plus d'éléments au début de celui-ci. –