Při vývoji open-source balíčků pro PYPI (the Python Package Index) se mi i přes veškeré automatické testování kódu často stává, že objevím nějakou chybu související s releasem až po releasu. Typicky se jedná o chybně naformátované README.rst
(parser na PYPI je extrémně citlivý a podpora Markdownu se bohužel nekoná), omylem zveřejněnou __pycache__
atd.
Soubory na PYPI je možné smazat, ale od ledna 2015 už není možné soubory se stejnou verzí znovu nahrát.
Nezbývá tedy než vydat novou verzi balíčku (v kontextu sémantického verzování se jedná o inkrementaci x.x.PATCH
segmentu). Bohužel v případě zmiňovaného formátování README.rst
se stejně nedozvíte, kde reálně chyba je, opravujete tak naslepo… a verze mohou přibývat.
Test PYPI
Pro otestování samotného releasu přichází ke slovu testovací PYPI, o kterém jsem se nedávno dozvěděl. Nachází se na adrese https://testpypi.python.org/pypi a funguje stejně jako jeho „ostrá“ verze – tj. zaregistrujete svou osobu a package, vytváříte releasy atd.
Registrace balíčku:
python setup.py register -r https://testpypi.python.org/pypi
Release balíčku:
python setup.py sdist upload -r https://testpypi.python.org/pypi
python setup.py bdist_wheel upload -r https://testpypi.python.org/pypi
Ačkoliv je testovací PYPI skvělý pomocník, stoprocentně na něj spoléhat nelze. V době psaní článku např. neuměl testovací PYPI tagy pro nové Django 1.10:
running register
running egg_info
...
running check
Registering ... to https://testpypi.python.org/pypi
Server response (400): Invalid classifier "Framework :: Django :: 1.10"