[python] Django a debianí balí?kovací systém

Petr Viktorin encukou na gmail.com
Pondělí Červenec 11 21:31:56 CEST 2016


On 07/11/2016 08:26 PM, David Rohleder wrote:
> Ahoj,
>
> mám tak trochu problém nalezením řešení pro jednu konkrétní situaci:
>
> Máme vlastní django aplikaci a rádi bychom ji zabalili jako debianí
> balík. Z mého pohledu potřebuju něco typu - jedno django - jedna
> aplikace. Bohužel django používá jinou filozofii - jedno django - mnoho
> aplikací (které také sdílejí jednu databázi a pod).
>
> Když django startuje projekt, tak vytvoří základní kostru pro aplikace
> ve tvaru:
>
> myproject/
>     manage.py
>     myproject/
>         __init__.py
> 	settings.py
>         urls.py
>         wsgi.py
>
> každá aplikace si pak vytvoří svůj vlastní podstrom
>
> myproject/
>     manage.py
>     blog/
>         __init__.py
>         models.py
>         managers.py
> 	settings.py
>         views.py
>         urls.py
>         templates/
>
> cílem je, aby byly jednotlivé aplikace v rámci jednoho djanga tzv.
> self-contained.
>
>
> Já mám ovšem pocit, že toto není úplně šťastné řešení a chtěl bych, aby
> každá aplikace byla separátní instancí djanga (a o řízení se staral
> třeba apache) - žádné sdílení databáze mezi jednotlivými aplikacemi a
> pod.
>
> Cílem je, abych mohl vytvořit debianí balík tak, abych mohl vedle sebe
> nainstalovat několik oddělených aplikaci (které mezi sebou nemají žádný
> vztah). Ideálně tak, že bych měl pouze adresář
>
> myproject/
>     manage.py
>     myproject/
>         __init__.py
>         urls.py
>         wsgi.py
>         models.py
>         managers.py
>         views.py
>
>     urls.py
>         templates/
>
> problém je v tom, že takto django moc nefunguje a zatím musí mít člověk minimálně dva adresáře - jeden se samotným djangem (settings.py a spol.) a další se samotnou aplikací.
>
> Ví někdo, jak se správně vyrábí django balík pro nějakou linuxovou distribuci (debian, RH)? Případně jak na to? Nerad bych se dopustil nějaké prasárny, která by mně do budoucnosti zkomplikovala práci.

Ahoj! Já do Djanga moc nedělám a balíčkuju jen pro Fedoru, ale takhle 
bych to dělal já:

Z každé appky můžeš vytvořit reusable appku [0], a tu zabalit zvlášť. 
Pokud ti v "hlavním" projektu zbyla nějaká funkcionalita (models, views, 
templates, ...), tak vytvoř novou zvláštní reusable appku a tyhle věci 
dej do ní.
V projektu ti pak zbudou jenom moduly jako settings.py, urls.py, 
wsgi.py, které zabal zvlášť, a všechno ostatní tomu dej jako závislosti.

Nejde to udělat tak, že každá aplikace bude separátní instance Djanga – 
takhle to opravdu nefunguje. Např. 'django.contrib.auth', která definuje 
model User, je taky appka, a spousta ostatních appek ji používá, ale 
nedá se dost dobře spustit sama o sobě.

[0] https://docs.djangoproject.com/en/1.9/intro/reusable-apps/





Další informace o konferenci Python