přihlásit 3905/544799

Přenositelnost programů

Přenositelností programů se myslí možnost jejich spouštění na různých operačních systémech a různých hw architekturách. Obecně se dá přenositelnost programů napsaných v pythony považovat za výbornou. Není to to nejlepší, co vůbec existuje, musíme na ni trochu předem myslet, ale jen trochu a to se počítá.

V první řadě záleží na dostupnosti interpretu Pythonu na různých OS. Ta je vskutku výborná. Python je k nalezení nejen na všech hlavních OS, tedy Windows, různých UNIXech včetně Linuxu a Mac OS X, ale i takových platformách, jako je Windows CE, Symbina60 (některé chytré mobilní telefony), maemo a podobně.

V druhé řadě je potřeba si dát pozor na systémové odlišnosti, které Python nedovede odstínit. Obecně to jsou oddělovače v cestách souborových systémů, konce řádků a kódování češtiny. V Pythonu je to snadné.

Na oddělovače v cestách (UNIX = /, Windows = \) je nejlepší používat knihovnu os.path, která rozdíly mezi jednotlivými OS stírá a ani nemusíte vědět, co se kde používá. Rozdílné konce řádků textových souborů Python řeší automaticky sám. Jeho vnitřní kódování znaků je UNICODE, tedy univerzální a bezproblémové, jen je potřeba si dát pozor na nastavení výstupního a výstupního kódování. Především Windows jsou v tomto nelogické, protože na konzoli používají kódování CP852, ale vstup z klávesnice je v CP1250 a je potřeba si dát pozor na správné nastavení.

Není to nijak složité, když s tím člověk předem počítá a přenositelnost programů napsaných čistě v Pythonu je tak dosažitelná s minimální námahou. Většina programů ale není napsaná čistě v Pythonu a používá různé knihovny, ať dodávané jako součást Pythonu, nebo doinstalované. U takového programu je potřeba se podívat i na přenositelnost použitých knihoven.

Co se týče standardních knihoven (dodávané s distribucí Pythonu), tak již zde se nechází některé, které jsou podporovány jen na některých OS. Většinou jsou to systémově specifické věci jako např. _winreg, který je podle očekávání k dispozici jen na Windows a slouží k práci s registry.

Dostupnost knihoven v jednotlivých OS je popsána v dokumentaci Pythonu. Nahlédněte do Library Reference. Je rozdělena do řady kapitol. Kapitoly nazvané XXX Specific Services, kde XXX jsou jednotlivé OS (Unix, MS Windows, Sun OS, ...). Tam je to jasné, v nich jsou uvedeny knihovny dostupné jen na určité platformě. Některé knihovny jsou dostupné na více platformách, ale nemusí být dostupné úplně všude. Tyto jsou v kapitole Optional Operating System Services. Zde může být problém na okrajových platformách, ty hlavní, Windows a UNIX jsou zastoupeny.

Kromě toho vím o jedné knihovně, která se chová jinak v UNIXu a jinak ve Windows, jedná se o knihovnu mmap z Optional Operating System Services. To je dáno tím, že mmap je systémové volání a ve Windows je implementováno jinak než v UNIXech a tyto systémy skrze ni poskytují různé a ne plně slučitelné možnosti. Vše je samozřejmě v dokumentaci přesně popsáno.

Tyto problémová místa jsou obvykle hluboké systémové záležitosti, a programátor který těmto zéležitostem rozumí a chce je použít pravděpodobně ví, že jsou závislé na OS, jsou nepřenositelné a dovede se s tím vyrovnat. Při běžném programování se s nimi člověk běžně nesetká a tak to moc přenositelnosti nebrání.

To samé se týká i externích (doinstalovaný) knihoven. Při jejich použití je potřeba zabezpečit, aby byly nainstalovány na cílovém počítači, protože se nedistribuují jako součást programu. Zde Python vychází z UNIXové praxe, uživatele Windows to může překvapit. Při tom pochopitelně záleží na přenositelnosti a dostupnosti těch knihoven pro cílovou platformu. Zde se často stává, že i běžné knihovny nejsou dostupné na všech platformách. Pokud chcete vytvořit přenositelný program, je nutno se jich vyvarovat.

Například binding na knihovny GNOME jsou k dispozici jen na UNIXech, kde je k dispozici GNOME, tedy určitě ne ve Windows. Grafická knihovna GTK je dostupná na UNIXech i Windows, za použití X Serveru i na MacOS X. Psaní přenositelných GUI programů mezi těmito OS je proto jednoduché. Ještě jednodušší je to s GUI knihovna TK, protože ta je součástí distribuce Pythonu (není nutno zajišťovat její instalaci na cílovém počítači) a je k dispozici na UNIXech, Windows i MacOS. TK knihovna je poněkud jednodušší, ale na jednoduché GUI stačí.

Já osobně programuji v Linuxu a mé aplikace jsou používány převážně na Windows. Nemám s tím žádné problémy a s výjimkou výběru vhodných knihoven a používání os.path se o to nijak zvlášť nestarám. Tedy na přenositelnost je potřeba myslet předem, ale není to nic těžkého, psát přenositelné programy v Pythonu je jednoduché.