Apríl 11, 2010

Buildout – podpora virtuálneho prostredia nie len pre Python

Buildout pre Python je niečo ako Maven pre Javu. Buildoutu jednoducho predhodíte recept. Tento recept popisuje, ako má vaše prostredie vyzerať a Buildout za vás pohľadá všetky závislosti a nainštaluje ich. Pythonieristi si možno povedia: “Ale veď inštaláciu zvláda aj easy_install alebo pip“. To je pravda, ale Buildout posúva prácu s virtuálnym prostredím o level ďalej.

Predstavte si, že pracujete v tíme a teraz potrebujete, aby kolega mal rovnaké pracovné prostredie ako vy. Rovnaké balíky, rovnaké nastavenie služieb. Jednoducho napíšete recept pre buildout a ten mu pošlete. Buildout sa postará o vytvorenie virtuálneho prostredia, tak ako to poznáme z Virtualenv. Naviac nainštaluje potrebné balíky. Teraz pozor! Odinštaluje nepotrebné balíky. Nastaví adresáre a importy presne, tak ako je to potrebné. Buildout umožňuje zaviesť do projektu podstatný prvok: opakovateľnosť.

Buildout nie je nástroj výhradne len pre Python. Môžete s ním spracovávať, aj zdroje z Gitu alebo ZIP súborov. Pokiaľ pracujete extenzívnejšie s Pythonom a balíčkovaním aplikácii, určite mu venujte minutku na naučenie.

Príklad receptu na inštalovanie Tracu 0.12dev:

[buildout]
parts = babel genshi trac mypy

[babel]
recipe = zc.recipe.egg
eggs =
    Babel

[genshi]
recipe = infrae.subversion
as_eggs = true
urls = http://svn.edgewall.org/repos/genshi/trunk genshi


[trac]
recipe = infrae.subversion
urls = http://svn.edgewall.org/repos/trac/trunk trac
as_eggs = true

# Make eggs visible to mypy interpreter
[mypy]
recipe = zc.recipe.egg
eggs =
    ${trac:eggs}
    ${genshi:eggs}
    ${babel:eggs}
interpreter = mypy
scripts = mypy

Buildout potupne spracuje jednotlivé časti a podľa receptov uvedených za slovíčkom “recipe”, nainštaluje a upraví potrebné konfigurácie prostredia. Predtým, než sa vrhnete do písania vlastného receptu, odporúčam skontrolovať, či už rovnaký alebo veľmi podobný recept neexistuje.

Pokiaľ tápete v tom, ako funguje Python Eggs a virtuálne prostredie, odkážem vás na výbornú prezentáciu z PyConu 2009 – Eggs and Buildout deployment in Python: