Přechod webových aplikací na Python 3 Tomáš Pazderka 6. listopadu 2018

Podobné dokumenty
Automatické testování softwaru. Testujte svůj kód! Předpoklady: Příklad: sum_digits() Možnost 1: Zkusíme funkci použít v konzoli Pythonu.

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Vývoj řízený testy Test Driven Development

Django. Webový framework pro Python Projekt = webová stránka Aplikace = určitá funkcionalita webu

Python profesionálně: dynamické parametry, generátory, lambda funkce... with. Dynamické parametry

Custom Code Management. Přechod na S/4HANA

Úvod do programovacích jazyků (Java)

Definice uživatelského typu. Uživatelem definované typy. Součinové datové typy. Součtové datové typy. FLP - Uživatelem definované typy

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

Microsoft Access tvorba databáze jednoduše

Knot DNS Resolver. Modulární rekurzivní resolver. Karel Slaný

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Konečný automat. Jan Kybic.

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Počítačové sítě Systém pro přenos souborů protokol FTP

Standardní algoritmy vyhledávací.

Prototyping konfigurace linuxových serverů. horizontální škálování Deltacloud API

SRSW4IT Inventarizační SW. Prezentace aplikace. Vedoucí DP: ing. Lukáš Macura Autor: Bc. Petr Mrůzek

Mib:S4Road přechod k SAP S/4HANA. Jiří Palát

Instalace a konfigurace ústředen Asterisk. Bc. Marek Červenka, IPEX a.s.,

Funkce, podmíněný příkaz if-else, příkaz cyklu for

GTL GENERATOR NÁSTROJ PRO GENEROVÁNÍ OBJEKTŮ OBJEKTY PRO INFORMATICA POWERCENTER. váš partner na cestě od dat k informacím

Marketingová komunikace. 2. soustředění. Mgr. Pavel Vávra Kombinované studium Skupina N9KMK1aPH/N9KMK1bPH (um1a1ph/um1b1ph)

Vývoj software pro Linuxové distribuce. Installfest Praha,

SIMATIC WinCC Data Monitor. Siemens s.r.o.

SonarQube - statická analýza kódu a její zapojení v CI. Babu Červenková Big Data developer - Java Fulltext - Robot tým

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Dobrý SHOP Popis produktu a jeho rozšíření

Kurz Databáze. Přechod na SQL server. Obsah. Vytvoření databáze. Lektor: Doc. Ing. Radim Farana, CSc.

Uvažujete o změně automatizovaného knihovního systému?

Obsah. Kapitola 1. Předmluva 11 O této knize 13 Konvence...13

Paradigmata programování II Korutiny a nedeterminismus

Minerva TPV+ TPV funkcionalita v QAD. David Pochman Senior konzultant

Motivace. Vstup a výstup. Minimální komunikace. Motivace. ÚDPJ - Vstup a výstup. Ing. Lumír Návrat katedra informatiky, A

Nové jazykové brány do Caché. Daniel Kutáč

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

IB015 Neimperativní programování. Časová složitost, Typové třídy, Moduly. Jiří Barnat Libor Škarvada

Počítačová Podpora Studia. Přednáška 5 Úvod do html a některých souvisejících IT. Web jako platforma pro vývoj aplikací.

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Projekt JetConf REST API pro vzdálenou správu

Metodiky pro automatické testování webové aplikace. Ondřej Melkes, Martin Komenda

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

HIKVISION. Čas a docházka. VIAKOM CZ s.r.o.

Příloha č. 1 Technická specifikace předmětu plnění

STUDIJNÍ MATERIÁL PRO TECHNICKOU CERTIFIKACI ESET Business Edition, ESET Remote Administrator

IB111 Úvod do programování skrze Python Přednáška 7

EXTRAKT z technické normy ISO

Inthouse Systems s.r.o. Specifikace. Inthouse App a Inthouse Studio pro Siemens Climatix 6XX. Verze software 1.X. Revize dokumentu 6

Programy a algoritmy pracující s čísly. IB111 Úvod do programování skrze Python

Technologie. Osnovy kurzu: Školení správců systému. 1. den, dopolední blok

Co je (staro)nového v DSpace

FRED & PostgreSQL. CZ.NIC, z.s.p.o. Jaromír Talíř <jaromir.talir@nic.cz>

12. VHDL pro verifikaci - Testbench I

PRG036 Technologie XML

Dokumentace ke knihovně InsDevice

Konstruktory překladačů

Cobbler, Puppet, Func

Zajištění kvality programového vybavení - testování

Testování. Zadání příkladu. Vytvoření kostry třídy. Obsah:

Moduly MicroUnit serie. všechny typy s výjimkou řady MU-43x, MU-44x a MU-84x

Dobrý CMS Popis produktu a jeho rozšíření

Dobrý FOTO Popis produktu a jeho rozšíření

SQL a XML jako alternativa ke klasickým unixovým nástrojům

Server Internetu prostøednictvím slu eb (web, , pøenos souborù) poskytuje data. Na na í pracovní stanici Internet

Server Internetu prostøednictvím slu eb (web, , pøenos souborù) poskytuje data. Na na í pracovní stanici Internet

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 12.2.


První kroky s METEL IEC IDE

ADMINISTRACE POČÍTAČOVÝCH SÍTÍ. OPC Server

Nástroj Project Loader TXV Šesté vydání Září 2013 změny vyhrazeny

Instalace a konfigurace OpenAdmin tool na M$ a Linuxu

Robot Operating System. Ing. Zdeněk Materna,

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Čipové karty Lekařská informatika

Testovací protokol USB Token Cryptomate

Kámen-nůžky-papír. Tomáš Svoboda Centrum strojového vnímání, Katedra kybernetiky Fakulta elektrotechnická, České vysoké učení technické

Automatizace správy linuxové infrastruktury pomocí Katello a Puppet LinuxDays

Ošetřování chyb v programech

Stromy. Jan Kybic.

Kámen-nůžky-papír. Tomáš Svoboda Centrum strojového vnímání, Katedra kybernetiky Fakulta elektrotechnická, České vysoké učení technické

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Instalace a konfigurace web serveru. WA1 Martin Klíma

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

M4 PDF rozšíření. Modul pro PrestaShop.

Procesní dokumentace Process Management. Pavel Čejka

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr

Programování v Pythonu

ACOUSTIC EMISSION SIGNAL USED FOR EVALUATION OF FAILURES FROM SCRATCH INDENTATION

Programování v Pythonu

Architektura aplikací v Seznam.cz

zswi/pc-testování.d 10. května

Knihovna RecDBXLib ZÁZNAMY V DATABOXU TXV

Obsah. Kdo jsme? Co vám přinášíme s naší bránou? Jak si otevřu bránu na klikniavolej.cz?... 3

Django, 2. cvičení url, views, templates. Úvod

Trendy a vývoj vědeckého publikování

Principy ATM sítí. Ing. Vladimír Horák Ústav výpočetní techniky Univerzity Karlovy Operační centrum sítě PASNET

Rozpoznávání a klasifikace fotografií pivních přepravek

Efektivní provoz koncových stanic

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Transkript:

Přechod webových aplikací na Python 3 Tomáš Pazderka tomas.pazderka@nic.cz 6. listopadu 2018

Python 3 První verze vyšla 2008 První production ready verze vyšla 2009 Řešení některých chyb v návrhu jazyka Změna nekompatibilní s python 2 Reorganizace standardních knihoven

Nejčastější rozdíly oproti python 2 Problém print xrange dělení iter metody přesun/přejmenovaní modulu text vs. bytes Řešení přepsat na funkci from builtins import range // pro celočíselné dělení from builtins import... detekce verze, wrapper (six) zadefinovat API

Proč přejít? 3 > 2 Modernější jazyk Aktivní vývoj Rozšíření stdlib AsyncIO Konec podpory pro Python 2.7 v lednu 2020

Dostupné pomocné nástroje 2to3 konverze python 2 na python 3 futurize konverze python 2 na python 2/3 modernize konverze python 2 na python 2/3 six wrapper pro kompatibilitu 2/3 future backport python 3 konstrukcí do python 2 past implementace python 2 konstrukcí v python 3

Předpoklady pro úspěšnou portaci Závislosti 349/360 nejpopulárnějších aplikací má podporu pro Python 3 caniusepython3 Výměna za jinou knihovnu, fork Testujte Dobré pokrytí testy výrazně usnadní práci Pomůže odhalit nekompatibility tam, kde není zřejmé rozhraní Refaktoring Odstranit nepoužitý kód Odstranit zastaralé metody

Naše codebase 29 projektů, ~ 100k LOC Vzájemné závislosti, někdy i poměrně složité Cca 50 externích závislostí Některé z nich opuštěné a nespravované Naší jedinou volbou byl převod na Python 2/3

Použité knihovny isort automatické řazení importů autopep8 nástroj pro formátování kódu tox framework pro správu testovacích prostředí six knihovna zajišťující kompatibilitu pro Py2 a Py3

isort & autopep8 isort hromadné přidání importů from future import unicode_literals usnadnění zafixování str/bytes API autopep8 normalizace indentace a mezer odstranění zastaralých metod (has_key) odchycení výjimek porovnávání typů a další...

Tox Projekt pro automatizaci činností pro python projekty Umožňuje snadno a parametricky vytvářet virtuální prostředí volitelné závislosti různé verze pythonu různé verze knihoven Snadná konfigurace Sjednocení procesů pro vývojové prostředí a CI

Definice dostupných prostředí [tox] envlist = quality clear-coverage py27-{pure, dep} {py35, py36, py37}-{pure, dep} compute-coverage skip_missing_interpreters = True

Společná nastavení [testenv] setenv = PYTHONPATH = {toxinidir}/test_cfg:{env:idl_dir:} DJANGO_SETTINGS_MODULE = settings passenv = PG* CI* skip_install = coverage: True extras = testing # install dependencies from setup.py extras_require['dependency'] dep: dependency deps = coverage install_command = pip install --process-dependency-links {opts} {packages} commands = coverage run --parallel-mode --source=app --branch -m django test APP

Nastavení konkrétního prostředí [testenv:clear-coverage] commands = coverage erase [testenv:compute-coverage] commands = coverage combine coverage report --include=*/tests/* coverage report --omit=*/tests/* --fail-under=100 --show-missing [testenv:quality] basepython = python2.7 whitelist_externals = msgcmp extras = quality ignore_errors = True # Do not fail on first error, but run all the checks commands = isort --recursive --check-only --diff APP django-admin makemessages --locale C --no-obsolete --keep-pot msgcmp APP/locale/cs/LC_MESSAGES/django.po APP/locale/django.pot

Převod projektu na python 3 kompatibilní s pomocí knihovny six Nahrazení typů unicode a str za six.text_type a six.binary_type Definice str a unicode definovat str a třídu obalit @six.python_2_unicode_compatible Definice nonzero, nově bool doporučeno implementace svázat import urlparse/urllib nahradit za import six.moves.urllib.parse StringIO/BytesIO importovat ze six Důsledně používat binární mód při otevírání binárních souborů

Perličky Podivná API - str v obou verzích pythonu if isinstance(name, six.text_type) and six.py2: name = name.encode() elif isinstance(name, six.binary_type) and six.py3: name = name.decode() Porovnávání různých typů test = None if 2 < test: do something

Jak psát kompatibilní kód Python 2 by měl být výjimkou... if six.py2: handle python 2 else: handle python 3 Konverze mezi textem a bytes by měla probíhat na hranicích kódu Vyhnout se iteritems pokud to není nezbytné pro výkon pokud ano, tak six.iteritems Zadefinovat API (unicode/bytes)

Děkuji za pozornost... a zadefinujte si API!