====== Librairies ====== ---- ===== Installation ===== ==== Base ==== pip install ==== Environnement virtuel ==== Installer puis utiliser pipenv ==== Pycharm ==== * créer un environnement virtuel (proposé par Pycharm lors de la création du projet) * A postériori aller dans « File / Settings... / Project / Python Interpreter » cliquer sur « + » puis taper le nom du module à rechercher puis en bas cliquer sur « Install Package » ===== Pipenv ===== [[https://pypi.org/project/pipenv/|Pipenv]] ==== Objet ==== Simplification dans l'utilisation des librairies et création automatique d'un environnement virtuel. ==== Utilisation ==== === Installation Ubuntu === sudo apt install pipenv === Installation Redhat/CentOS === pip3 install pipenv === Installation Windows === * Installer pipenv pip install pipenv * Modifier la variable PATH pour ajouter les 2 chemins suivants : C:\Users\\AppData\Roaming\Python\Python38\Site-Packages C:\Users\\AppData\Roaming\Python\Python38\Scripts === Initialisation === Se positionner dans le répertoire du projet et lancer la commande : pipenv install --python /usr/bin/python3.8 La commande va installer toutes les librairies nécessaires et créer les 2 fichiers suivants s'ils n'existent pas encore : * Pipfile : contient les dépendances * Pipfile.lock : contient les informations de version === Variables d'environnement === Possibilité de créer un fichier .env contenant les variables d'environnement pour l'exécution du programme. Par exemple pour positionner le niveau de log souhaité : ## LOG LEVEL ## LOGURU_LEVEL=DEBUG === Exécution === pipenv run python ==== Dépannage ==== === Débordement de tempo === Si l'installation prend trop de temps elle peut terminer en échec notamment sur Raspberry PI ou bien en cas de connexion internet trop lente. Pour laisser plus de temps à l'installation il est possible de modifier 2 temporisation avant de lancer la commande PIPENV : export PIPENV_INSTALL_TIMEOUT=9999 export PIPENV_TIMEOUT=999 [[https://stackoverflow.com/questions/51255947/pipenv-install-failing-due-to-timeout|Source]] ---- ===== Tendo ===== [[https://pypi.org/project/tendo/|Tendo]] ==== Objet ==== Ajout de fonctionnalités basiques. ==== Fonctions ==== === SingleInstance === Pour s'assurer de n'avoir qu'une seule instance du programme. from tendo import singleton singleton.SingleInstance() # fera un sys.exit(-1) si une autre instance est en cours d'exécution ---- ===== Loguru ===== [[https://loguru.readthedocs.io/|Loguru]] ==== Objet ==== Librairies pour gérer simplement les logs du programme. ==== Utilisation ==== === Fonctions === * debug : information détaillée uniquement pour diagnostiquer un problème * info : confirmation du déroulement normal du programme * warning : indication de quelque chose d'inattendu, mais le programme fonctionne normalement * error : problème plus important, le programme n'a pas pu faire quelque chose * critical : erreur sérieuse, indique que le programme risque de ne pas pouvoir poursuivre. === Niveau d'information === Chacune des fonctions correspond au niveau de log correspondant. Le niveau par défaut est positionné à ''WARNING'', ce qui veut dire que seuls les messages à partir de ce niveau sont affichés (donc pas les niveau ''DEBUG'' et ''INFO''). === Exemple === from loguru import logger logger.setLevel(logging.WARNING) logger.debug("Ce message ne s'affichera pas") logger.info("Celui-ci non plus") logger.warning("Premier message à s'afficher") logger.error("Celui-ci aussi") logger.critical("Ce dernier également") ---- ===== Aiohttp ===== [[https://docs.aiohttp.org/|Aiohttp]] ==== Objet ==== Client/serveur http asynchrone. ==== Utilisation ==== === Serveur === from aiohttp import web async def handle(request): name = request.match_info.get('name', "Anonymous") text = "Hello, " + name return web.Response(text=text) app = web.Application() app.add_routes([web.get('/', handle), web.get('/{name}', handle)]) if __name__ == '__main__': web.run_app(app) === Client === import aiohttp import asyncio async def main(): async with aiohttp.ClientSession() as session: async with session.get('http://python.org') as response: print("Status:", response.status) print("Content-type:", response.headers['content-type']) html = await response.text() print("Body:", html[:15], "...") loop = asyncio.get_event_loop() loop.run_until_complete(main()) ----