Path: csiph.com!feeder.erje.net!1.eu.feeder.erje.net!newsreader4.netcologne.de!news.netcologne.de!peer02.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.am4!peer.am4.highwinds-media.com!news.highwinds-media.com!fx24.am4.POSTED!not-for-mail Received-SPF: pass (Address passes the Sender Policy Framework) SPF=MAILFROM; sender=encukou@gmail.com; remoteip=::ffff:209.85.128.45; remotehost=; helo=mail-wm1-f45.google.com; receiver=hugo.zagamma.cz; DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=cgeowMZqujZaU7iBmWwtWcb6G/kJdHySdI9o9MhfAo4=; b=Kw6PL+JqJ8/H9/J8lvkBKgbSBNeIEVTYiQXXJTrbR0NVYvXX1OfmEZqXgnBPOqAWqj 82k4XNM8phm/aJaY4X3cp1n4pLFI4y57fi6wKIYLdduvC7mNCQFBeb+7vhwGmgpeKObu ae8TlBR80uQulJ11DEo8qIPeQLCGJ+uR/erMcQWXqU9F800nKFcLTpfC1m3/ubSvIYLx 2/3mTJXmWBkexw6YFB0VQsXU6Wg9erSc20+TBce6fZujOMS06wwfSnLmXvLMp7dbQuhO QYImsnvs4+qHDWdLe3589lO2CZ8RLJflIdkLHGchrWaZ6HcB2PNq7dbxWlTkwkiJfRGq 2yTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=cgeowMZqujZaU7iBmWwtWcb6G/kJdHySdI9o9MhfAo4=; b=JFY3XWJlNrZx6XLftsGBqdG/fdVzlYqkcY8zQNnPXupdPpnt7Q/4sCujUQXAWJCjIc Za7P62sC9Dp1EB8Jh0CxyZ6F/tBwyEfc7baR4oJIBlMOUCn0NHG5sdvQpFAJ0i3Aabqq OLKeoULQ89zMvoJ/HgUYmEiuGc02xxyY6ySf5L/6XgCGRIZ6dxc0oGHSZq5v0tuC/OJe m1cURwUyi50aovTII1/pd8tj0ugxu/eU7zcycGFhOkloov+7WAwBzflIezMcGlhAOBiU 0XX8mHclXgjpZSh4It1AaJ6tpZGCRyjAQk0OCMj5jkBnxK+K3/eFX9LRhWcQBg7BBq5d 6hLg== X-Gm-Message-State: AA+aEWZ4D9R+WoFK22dko2Zx9rTM43tr/cEF982t6zXhJ9bzMKM0g1Vj +gr/tfqL1Rjgf1k7HoPJEJI= X-Google-Smtp-Source: AFSGD/WsCejOBBuZ7EakNqjLJHC5Clxb2fiXsmGEwrblFH5lZXkEpIc0RBXnYSyrtamRqvYRZv8Z5Q== X-Received: by 2002:a1c:af08:: with SMTP id y8mr9704125wme.94.1543914621584; Tue, 04 Dec 2018 01:10:21 -0800 (PST) Old-Return-Path: From: Petr Viktorin User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.3.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Subject: Re: [python] =?utf-8?b?SmUgayBkaXNwb3ppY2kgbm92xJtqxaHDrSB2ZXJ6ZT8=?= X-BeenThere: python@py.cz X-Mailman-Version: 2.1.26 Precedence: list List-Id: Konference PyCZ List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: cz.comp.lang.python Message-ID: X-Mailman-Original-Message-ID: <4d90521b-02ca-7cae-a60b-d190f9e9ebc9@gmail.com> X-Mailman-Original-References: References: <4d90521b-02ca-7cae-a60b-d190f9e9ebc9@gmail.com> Lines: 54 X-Complaints-To: abuse@usenet-news.net NNTP-Posting-Date: Tue, 04 Dec 2018 09:10:24 UTC Organization: usenet-news.net Date: Tue, 4 Dec 2018 10:10:19 +0100 X-Received-Bytes: 7497 X-Received-Body-CRC: 115405415 Xref: csiph.com cz.comp.lang.python:3345 On 12/4/18 8:11 AM, Petr Blahoš wrote: [...] > Já jsem to na začátku neřekl jasně, Chtěl jsem pouze použít ty funkce > pipu, které umí vyextrahovat verzi z názvy souboru, > a verze porovnat. Protože to číslování verzí, když uvážíme veškeré bety > a rc a různé formáty je zatraceně složitý, takže > by bylo lepší použít už existující funkce spíš než to psát, a to i > přesto, že ty balíčky, o kterých mluvíme jsou moje, takže > to jejich schéma verzování znám, a můžu to postavit přímo na ně. Ahoj! pip není knihovna, nemá veřejné funkce. Jeho vnitřnosti se mění dost často na to, aby se nevyplatilo ho importovat. Určité části pipu se postupně reimplementují ve znovupoužitelných knihovnách, ale parsování jmen wheel souborů v tomhle myslím není moc priorita. Naštěstí je relativně jednoduché. Jména wheelů jsou standardizována v [PEP 427]. Části jména souboru jsou oddělené pomlčkama, a verze je druhá část. (Specifikace dál říká, že ty části jsou navíc pozměněné aby obsahovaly jen písmena/čísla/tečku. Ale validní verze nemůže obsahovat jiné znaky, takže ji lze z jména wheelu korektně získat.) Verze a jejich porovnání jsou standardizovány v [PEP 440], ale tam je to trochu složitější než `name.split('-')[1]`. Naštěstí na porovnávání verzí existuje oficiální knihovna [packaging]. Chceš třídu `packaging.version.Version`. ---- Implementace v pipu je ještě složitější, protože pip se umí postarat i o starší způsoby verzování, které už by jako wheel nemělo být možné vydat. (Ani se nedají rozumně zakódovat do jména wheelu.) Tyhle způsoby nebyly standardizované; "správně" je porovnat byl ideál kterému se dá přibližovat, ale nedá se ho dosáhnout. Pro úplnost: na verze pip aktuálně používá [heuristiku] která se snaží být kompatibilní s [distutils.version], jehož [nedokumentované] třídy LooseVersion a StrictVersion jsou sbírka černé magie (s odpovídajícím komentářem!), resp. nepovedený pokus to nějak vyřešit. Asi si dokážeš představit, že udržovat kód který takové věci dělá není jednoduché. To je asi hlavní důvod proč samotný pip nemá API a je tendence standardizované/korektní části dávat z pipu ven do knihoven jako `packaging`. [PEP 427]: https://www.python.org/dev/peps/pep-0427/#file-name-convention [PEP 503]: https://www.python.org/dev/peps/pep-0503/#normalized-names [packaging]: https://packaging.pypa.io/en/latest/version/ [heuristiku]: https://github.com/pypa/pip/blob/873662179aebbf5eacdf681078f47bbfe5ee6149/src/pip/_vendor/distlib/version.py [distutils.version]: https://github.com/python/cpython/blob/master/Lib/distutils/version.py [nedokumentované]: https://docs.python.org/3/distutils/apiref.html#module-distutils.version