Fejlesztői környezet kialakítása Python alapú fejlesztéshez
Az alábbiakban egy rugalmas, jól karbantartható, Python alapú fejlesztési környezet kialakítását mutatom be. Azt a környezetet tekintem rugalmasnak, amely nem köti meg a kezemet a fejlesztés során választott eszközöket illetően, alacsony jogosultsági szinttel is használható, a karbantarthatóságot pedig abban mérem, hogy milyen egyszerű módozatot nyújt környezetek létrehozására, testreszabására és törlésére. A bemutatott módszertant a mindennapi munkáim során alkalmazom.
Az esszében Django 1.2-re építkező webalkalmazás fejlesztését feltételezem Mac OS X Snow Leopard-on 2.6.1-es Pythonnal.
A fejlesztői környezet kialakításához szükséges egyszeri konfiguráció
Python csomagok (modulok, alkalmazások, mindegy) beszerzése és telepítése több úton is járható. Dióhéjban a leggyakrabban előforduló opciókról:
-
Tömörített bundle letöltése a projekt honlapjáról (pl. Django-1.2.1.tar.gz), majd
python setup.py install
. Alapos figyelmet igényel, kényelmetlen karbantartás. -
OS-sel érkező csomag telepítése, például
port install py26-django
. Karbantartás, függőségek kezelését az OS végzi. Rendszerszintű hozzáférést igényel, minden alkalmazás adott csomagból a feltelepített verziójú példányt használja. Egyedi verziók projekthez kötött telepítése karbantartási problémákba ütközik. -
easy_install django
. Gyári kiszerelésben a Python értelmezővel érkező csomagkezelő. Használata kényelmes, a csomagok eltávolítását azonban nem támogatja. -
pip install django
. A pip a piacon elérhető legjobb csomagkezelő eszköz. Aktívan fejlesztett kódbázis és naprakészen tartott csomagtároló. Az easy_install-lal szemben képes csomagok eltávolítására. Együttműködik a dolgozat kulcs fontosságú eszközével, a virtualenvvel.
A virtualenv egymástól elszigetelt és a rendszertől különálló Python futtatási környezet kialakításáért felelős. Használata nem igényel adminisztrátori hozzáférést. Segítségével egyazon projekt több, például eltérő verziójú Python értelmezőt tartalmazó környezettel tesztelhető. Nincsenek eltérő verziójú csomagokból fakadó konfliktusok. Ha nincs szükségünk többet egy környezetre, rm
-mel törölhető.
Az alábbi lépésekkel konfiguráld a környezetet.
Mint említett, az easy_install a Python disztribúció része. Telepítsd fel vele a pipet.
$ sudo easy_install pip
Innentől a pipet használjuk. Telepítsd fel a virtualenvet.
$ sudo pip install virtualenv
Megválaszthatod, hogy a virtualenvet a projekt könyvtárához kötve szeretnéd elhelyezni, vagy inkább egy központi helyen tárolnád. Fejlesztői munkaállomáson célszerűbbnek tartom ez utóbbi opciót. Többek között ennek menedzselésében is segít a virtualenvwrapper.
$ sudo pip install virtualenvwrapper
Jelöld ki a virtuális környezetek gyökérmappáját.
$ mkdir ~/.virtualenvs $ export WORKON_HOME=~/.virtualenvs
A shelled indítójába (legyen ~/.bashrc) vedd fel a következő sorokat.
export WORKON_HOME=~/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
Az Emacs szövegeditor gyári kiszerelése kitűnő eszköz Python nyelvű fejlesztéshez. A tartozékai között szerepel a Python shell közvetlen elérésére akár interaktív módon, akár a szerkesztett forráskód részének vagy egészének azonnali értelmezésére. Erre a beépített támogatásra épül a virtualenv.el bővítmény, amellyel a konfigurált munkakörnyezeteket érhetjük el közvetlenül az editorból. A virtualenv-activate
paranccsal aktiválható a kívánt környezet; innentől kezdve az Emacsból irányított Python shell automatikusan ebben a környezetben fog dolgozni.
Fejlesztői környezet kialakítása új projekt számára
djangodev néven hozz létre egy új, teljesen üres (--no-site-packages
) környezetet.
$ mkvirtualenv --no-site-packages djangoenv
(Az mkvirtualenv
a virtualenvwrapper eszköze. Munkakönyvtárként a korábban definiált $WORKON_HOME-ot fogja használni. Virtualenvwrapper nélkül a virtualenv
parancs a fentiekkel megegyező paraméterezéssel a current working directory alatt hozza létre a környezetet.)
Aktiváld a virtuális környezetet. (Közvetlenül az mkvirtualenv
használata után ez nem szükséges, a legutóbb létrehozott környezet lesz aktív automatikusan, lásd shell prompt.)
(djangodev)$ workon djangoenv
Telepítsd a szükséges Python csomagokat, majd tárold el a telepített csomagok listáját, hogy egy új virtuális környezet létrehozásakor egy paranccsal telepíthesd azokat.
$ pip install ipython $ pip install Django $ pip install django-debug-toolbar # böngésző alapú fejlesztői kiegészítések $ pip install django-extensions # bővített manage.py parancslista $ pip install pysqlite # adatbázis kötések a választott motorhoz $ pip install south # gondtalan schema- és adatmigrációhoz $ pip freeze > requirements.txt
Hozz létre a csodanyul.hu számára egy munkakönyvtárat, és fogj hozzá a Django alapú site fejlesztésének.
$ mkdir ~/Sites/csodanyul.hu $ cd ~/Sites/csodanyul.hu $ django-admin.py startproject site $ open http://docs.djangoproject.com/en/1.2/intro/tutorial01/#intro-tutorial01
Meglévő site számára új munkakörnyezet felállítása a már taglaltakkal megegyező módon történik. Az akvitált munkakörnyezet a deactivate
-tel csatolható le. Az új munkakörnyezetbe másik munkakörnyezet csomagjai a pip install -r requirements.txt
-vel telephetők. Munkakörnyezet törlése egyszerűen a virtualenv által létrehozott könyvtár törlésével (vagy a virtualenvwrapper által nyújtott rmvirtualenv
parancs kiadásával) lehetséges.
Érdekes és nekem nagyon
Windows alatt sajnos nagyságrendekkel bénácskábban történik a telepítés, nem is szólva a csomagok kezeléséről, de itt sem volt 15 percnél több a legelső Python/Django telepítésem és konfigurálásom - a hivatalos súgó alapján csináltam, minden elsőre működött. Most Sqlite-val használom, mert a Pythonos MySQL libet sajnos nem sikerült elindítanom Windows alatt, bármit teszek valamilyen titokzatos hibával elpusztul :) Csak az a gond, hogy mióta Pythonozgatok azóta a PHP annyira nyögvenyelős nyelvnek tűnik... Pythonban minden működik, gyors, modern, nincsenek felesleges sallangok benne, nincs olyan, hogy fogszívós-kompromisszum, mert nem támogat ezt vagy azt... :) najó, nem dícsérem, mindkét nyelv jó, csak más.
pymysql
Sajnos egyelore, ha jol tudom a djangoban meg nincs hozza tamogatas (legalabbis hivatalosan), maga a pymysql teljesiti a djangos tesztek nagy reszet: http://code.google.com/p/pymysql/issues/detail?id=12&can=1&q=django