Sam & Max » stdlib http://sametmax.com Du code, du cul Sat, 07 Nov 2015 10:56:13 +0000 en-US hourly 1 http://wordpress.org/?v=4.1 Requests fait partie de la lib standard ! 3 http://sametmax.com/requests-fait-partie-de-la-lib-standard/ http://sametmax.com/requests-fait-partie-de-la-lib-standard/#comments Thu, 29 May 2014 05:07:29 +0000 http://sametmax.com/?p=10360 Enfin, presque :)

J’étais en train d’installer en vieux requirements.txt quand soudain :

  File "
 
/usr/lib/python2.7/dist-packages/pip/download.py", line 23, in <module>
    from requests.adapters import BaseAdapter
ImportError: No module named adapters

Wut ?

Mon erreur était due à une version de requests trop ancienne. J’upgrade et ça remarche. Mais ça m’a intrigué :

⟩ grin "requests"  /usr/lib/python2.7/dist-packages/pip/
/usr/lib/python2.7/dist-packages/pip/download.py:
   22 : import requests, six
   23 : from requests.adapters import BaseAdapter
   24 : from requests.auth import AuthBase, HTTPBasicAuth
   25 : from requests.compat import IncompleteRead
   26 : from requests.exceptions import InvalidURL, ChunkedEncodingError
   27 : from requests.models import Response
   28 : from requests.structures import CaseInsensitiveDict
  120 :         # Store the new username and password to use for future requests
  182 :         # We only work for requests with a host of localhost
  211 : class PipSession(requests.Session):
  548 :         except requests.HTTPError as exc:
/usr/lib/python2.7/dist-packages/pip/index.py:
   17 : import html5lib, requests, pkg_resources
   18 : from requests.exceptions import SSLError
   80 :         # The Session we'll use to make requests
  689 :         except requests.HTTPError as exc:
  692 :         except requests.ConnectionError as exc:
  697 :         except requests.Timeout:

Je regarde le code source github, qui diffère de celui de mon système :

from pip._vendor.requests.adapters import BaseAdapter, HTTPAdapter
from pip._vendor.requests.auth import AuthBase, HTTPBasicAuth
from pip._vendor.requests.compat import IncompleteRead
from pip._vendor.requests.exceptions import ChunkedEncodingError

Mais ça reste bien requests.

Donc, si vous avez la 3.4, vous avez pip installé, qui maintenant embed requests. Donc Python 3.4 vient forcément avec requests \o/

Si vous supportez uniquement cette plateforme, vous pouvez faire :

try:
    import requests
except ImportError:
    import pip._vendor.requests as requests

Et bénéficier de requests sans rien installer.

Tout ça pour ça.

]]>
http://sametmax.com/requests-fait-partie-de-la-lib-standard/feed/ 3
Qu’est-ce que la bibliothèque standard Python ? 4 http://sametmax.com/quest-ce-que-la-bibliotheque-standard-python/ http://sametmax.com/quest-ce-que-la-bibliotheque-standard-python/#comments Mon, 19 May 2014 09:36:16 +0000 http://sametmax.com/?p=10288 La lib standard ou stdlib, on vous en parle partout. Ce tuto vous explique comment faire telle tâche avec la lib standard. Ce README dit qu’il n’y a que la lib standard comme dépendance, c’est génial ! Cet article voudrait que le code X soit intégré dans la lib standard.

Mais au fait, c’est quoi la lib standard ?

Et bien c’est tout simplement l’ensemble du code qui est disponible si vous avez Python installé sur votre machine. Si un module fait partie de la bibliothèque standard, vous êtes certain que votre programme Python peut toujours l’utiliser : il n’y a rien à installer.

Cette lib standard est également intégralement documentée sur le site de Python, si bien que si vous téléchargez la doc hors ligne, vous pouvez quasiment dev en totale autonomie. En effet, même si le principe de la lib standard est le même pour tous les langages, en Python, elle est particulièrement intéressante car vraiment énorme. Et en plus vous avez le dump de notre blog :)

Le code de la lib standard évolue lentement, contrairement aux libs tierces parties, car elles sont soumises à des règles strictes et la revue de la communauté à travers des documents officiels : les PEP. Le PEP le plus célèbre étant le PEP 8, qui décrit le style recommandé pour du code Python.

De fait le code de la lib standard est un code fiable, sans surprise, mais qui proposera rarement les dernières innovations. Pour reprendre les mots de Guido :

Le code de la stdlib a un pied dans la tombe.

Car Python garanti la compatibilité ascendante de TOUTE la lib standard pour une version majeure. Ce qui veut dire que si vous utilisez un module de la stdlib écrit pour Python 2.5, il marchera en Python 2.7, et un module pour 3.1 marchera pour la 3.4.

Mais ça veut dire aussi que le module pourrira ici quand plus personne ne l’utilisera. La preuve en est getopt, qui a été remplacé par optparse, qui a été remplacé par argparse. Deux générations de libs plus tard, getopt est toujours importable en 2.7, bien que plus personne ne s’en serve, pour garantir cette compatibilité. Et en fait, on peut dire 5 générations, car nous-même utilisons docopt après prôné clize. Le monde de l’IT est comique.

Certains systèmes ébrèchent le principe de la lib standard, comme Ubuntu, qui package la lib TK séparément, et donc oblige à installer le paquet python-tk pour avoir le module tkinter, normalement inclus dans la lib standard. Ce comportement est heureusement assez rare.

]]>
http://sametmax.com/quest-ce-que-la-bibliotheque-standard-python/feed/ 4