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

David Rohleder davro na ics.muni.cz
Pondělí Červenec 11 22:04:01 CEST 2016


Petr Viktorin píše v Po 11. 07. 2016 v 21:31 +0200:
> 
> > 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ášť. 

jo. V současnosti mám ale pouze jednu appku a pokud budu psát další
appku, tak budu chtít, aby byla kompletně nezávislá na ostatních django
projektech.

> 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í.

nemělo by tam nic zbýt.


> 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.

To by potenciálně šlo, ale osobně bych rád spíš dospěl do stavu, kdy
bude settings.py (a všechno, co je iniciální součástí projektu)
součástí té jedné appky a tím pádem bych měl pouze jeden adresář s
celým projektem včetně té jediné appky.

> 
> 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ě.

až tak moc jsem to samozřejmě nemyslel. django.contrib.auth je patrně
appka, nicméně z mého pohledu je to součást standardní distribuce
djanga - pokud nějakým způsobem sahá do databáze, tak to dělá pro každý
projekt zvlášť.

Já bych si to představoval následovně: Když přistupuju ke dvěma adresám

http://server/app1
http://server/app2

tak bych chtěl, aby každá z těch webových adres byla oddělena na úrovni
apache serveru pomocí nějakého

Alias app1 /usr/share/lib/.../pythonXX/app1
<Location app1>
...
</Location>

Alias app2 /usr/share/lib/.../pythonXX/app2
<Location app2>
...
</Location>

Každá aplikace totiž může být:

 - vyvinutá pro jinou verzi djanga
 - vyvinutá pro jinou verzi pythonu
 - můžu mít dvě instance jedné aplikace, které budou používat různé
databáze


Navíc bych byl rád, aby bylo možné běžet různé verze djanga (kvůli
různě napsaným aplikacím), čehož je možné dosáhnout pomocí virtualenv,
ale to už se do toho zamotávám až příliš, pro začátek bych rád
dokonvergoval do stavu jedna aplikace - jeden balík.

Zatím mám dost pocit, že je v tomto django postaveno dost nešikovně a
nikdo s reusable apps moc nepočítal.

Snažil jsem se podívat na nějaký django projekt zabalený jako balíček
pro debian, ale zatím jsem přišel pouze na openstack dashboard, což je
teda dost moloch na to, abych se v tom jednoduše vyznal.

Chtěl jsem k tomu přistoupit jako ke standardnímu pythonovému řešení -
vyrobit setup.py ze setuptools, pomocí nich to nainstalovat do nějakého
adresáře a pak na tom adresáři spustit balíčkovací nástroje, ale zatím
se zasekávám na těch minimálně dvou adresářích potřebných pro každou
appku. Ten django přístup se mně v tomto případě moc nelíbí.

David



Další informace o konferenci Python