<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://wiki.ph-sw.fr/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://wiki.ph-sw.fr/feed.php">
        <title>Notes - python</title>
        <description></description>
        <link>https://wiki.ph-sw.fr/</link>
        <image rdf:resource="https://wiki.ph-sw.fr/lib/exe/fetch.php?media=wiki:dokuwiki.svg" />
       <dc:date>2026-05-10T13:06:04+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://wiki.ph-sw.fr/doku.php?id=python:accueil&amp;rev=1756971122&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.ph-sw.fr/doku.php?id=python:async&amp;rev=1617548516&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.ph-sw.fr/doku.php?id=python:django&amp;rev=1776016344&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.ph-sw.fr/doku.php?id=python:filesystem&amp;rev=1711531430&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.ph-sw.fr/doku.php?id=python:graphviz&amp;rev=1617548516&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.ph-sw.fr/doku.php?id=python:gunicorn&amp;rev=1676641146&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.ph-sw.fr/doku.php?id=python:http-request&amp;rev=1708540766&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.ph-sw.fr/doku.php?id=python:images&amp;rev=1617548516&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.ph-sw.fr/doku.php?id=python:math-snippets&amp;rev=1629814243&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.ph-sw.fr/doku.php?id=python:matplotlib&amp;rev=1728222451&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.ph-sw.fr/doku.php?id=python:modules&amp;rev=1640426447&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.ph-sw.fr/doku.php?id=python:numpy&amp;rev=1731585489&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.ph-sw.fr/doku.php?id=python:packaging&amp;rev=1647609989&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.ph-sw.fr/doku.php?id=python:pandas&amp;rev=1698665179&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.ph-sw.fr/doku.php?id=python:pickle&amp;rev=1628683007&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.ph-sw.fr/doku.php?id=python:pip&amp;rev=1677147130&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.ph-sw.fr/doku.php?id=python:pymysql&amp;rev=1617548516&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.ph-sw.fr/doku.php?id=python:tests&amp;rev=1639643253&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://wiki.ph-sw.fr/lib/exe/fetch.php?media=wiki:dokuwiki.svg">
        <title>Notes</title>
        <link>https://wiki.ph-sw.fr/</link>
        <url>https://wiki.ph-sw.fr/lib/exe/fetch.php?media=wiki:dokuwiki.svg</url>
    </image>
    <item rdf:about="https://wiki.ph-sw.fr/doku.php?id=python:accueil&amp;rev=1756971122&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-09-04T07:32:02+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>accueil</title>
        <link>https://wiki.ph-sw.fr/doku.php?id=python:accueil&amp;rev=1756971122&amp;do=diff</link>
        <description>Python

	*  Gunicorn
	*  API de GitHub, Gitlab, ...
	*  Manipulation du système de fichiers
	*  Snippets de fonctions mathématiques
	*  PyMySQL
	*  API de GraphViz
	*  Manipulation d&#039;images
	*  Gestion des modules
	*  Requêtes HTTP
	*  Pickle
	*  Tests unitaires
	*  Packaging des modules Python

	*  Le guide de l’auto-stoppeur pour Python!
	*  The Best of the Best Practices (BOBP) Guide for Python
	*  A guide to Python&#039;s function decorators
	*  Summary of Major Changes Between Python Versions

	…</description>
    </item>
    <item rdf:about="https://wiki.ph-sw.fr/doku.php?id=python:async&amp;rev=1617548516&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2021-04-04T15:01:56+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>async</title>
        <link>https://wiki.ph-sw.fr/doku.php?id=python:async&amp;rev=1617548516&amp;do=diff</link>
        <description>Programmation asynchrone en Python

----------

Threads

Lancement de threads


from threading import Thread

class RunFuncAsync(Thread):
    def __init__(self, func, args):
        Thread.__init__(self)
	self.func = func
	self.args = args

    def run(self):
	self.func(self.args)

threads = []

for _ in range(nb_of_threads):
    threads.append(RunFuncAsync(func, args))

for t in threads:
    t.start()

for t in threads:
    t.join()</description>
    </item>
    <item rdf:about="https://wiki.ph-sw.fr/doku.php?id=python:django&amp;rev=1776016344&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-04-12T17:52:24+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>django</title>
        <link>https://wiki.ph-sw.fr/doku.php?id=python:django&amp;rev=1776016344&amp;do=diff</link>
        <description>Django

	*  Gunicorn

	*  &lt;https://djangobook.com/mdj2-models/&gt; une petite référence de la manipulation des modèles dans le shell
	*  This Django Template Tag is Killing Your Performance
	*  Avoiding Duplicate Objects in Django Querysets

Servir les fichiers statiques avec Gunicorn

Source

Ajouter dans le fichier urls.py:


from django.contrib.staticfiles.urls import staticfiles_urlpatterns

urlpatterns += staticfiles_urlpatterns()</description>
    </item>
    <item rdf:about="https://wiki.ph-sw.fr/doku.php?id=python:filesystem&amp;rev=1711531430&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-03-27T09:23:50+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>filesystem</title>
        <link>https://wiki.ph-sw.fr/doku.php?id=python:filesystem&amp;rev=1711531430&amp;do=diff</link>
        <description>Manipulation du système de fichiers avec Python

Manipulation sur les chemins

Concaténer des chemins


import os

save_folder_repo = os.path.join(save_folder, name)


Obtenir le chemin du dossier d&#039;un fichier


import os

filepath = &quot;/a/b/c.txt&quot;
os.path.dirname(filepath) # &quot;/a/b&quot;</description>
    </item>
    <item rdf:about="https://wiki.ph-sw.fr/doku.php?id=python:graphviz&amp;rev=1617548516&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2021-04-04T15:01:56+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>graphviz</title>
        <link>https://wiki.ph-sw.fr/doku.php?id=python:graphviz&amp;rev=1617548516&amp;do=diff</link>
        <description>Utilisation de GraphViz avec Python

	*  &lt;https://bioinfo-fr.net/python-dessine-moi-un-graphe&gt;

Installation


pip install graphviz


----------

Utilisation de base


import pygraphviz as pgv

graph = pgv.AGraph(directed=True)

graph.add_edge(&quot;A&quot;, &quot;B&quot;, color=&quot;green&quot;, style=&quot;dashed&quot;)
graph.add_edge(&quot;B&quot;, &quot;C&quot;, color=&quot;red&quot;)

graph.layout(&quot;dot&quot;)
graph.draw(&quot;graph.png&quot;)

graph.close()</description>
    </item>
    <item rdf:about="https://wiki.ph-sw.fr/doku.php?id=python:gunicorn&amp;rev=1676641146&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-02-17T13:39:06+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>gunicorn</title>
        <link>https://wiki.ph-sw.fr/doku.php?id=python:gunicorn&amp;rev=1676641146&amp;do=diff</link>
        <description>Gunicorn

	*  &lt;https://zestedesavoir.com/tutoriels/598/developpez-votre-site-web-avec-le-framework-django/266_annexes/1538_deployer-votre-application-en-production/&gt;

Installation

Installer gunicorn avec Pip.

Script de lancement

Configurer un script pour lancer Gunicorn:


#!/bin/bash
set -e

LOGFILE=/var/log/gunicorn/plateforme_web.log
LOGDIR=$(dirname $LOGFILE)
LOGLEVEL=warning   # debug; info ou warning une fois l&#039;installation OK
NUM_WORKERS=13    # Règle : (2 x $num_cores) + 1

# user/gro…</description>
    </item>
    <item rdf:about="https://wiki.ph-sw.fr/doku.php?id=python:http-request&amp;rev=1708540766&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-02-21T18:39:26+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>http-request</title>
        <link>https://wiki.ph-sw.fr/doku.php?id=python:http-request&amp;rev=1708540766&amp;do=diff</link>
        <description>Requêtes HTTP en Python

	*  &lt;https://docs.python.org/fr/3/library/urllib.request.html&gt;
	*  &lt;https://docs.python.org/3.1/howto/urllib2.html&gt;
	*  &lt;https://stackoverflow.com/questions/32795460/loading-json-object-in-python-using-urllib-request-and-json-modules&gt;
	*  &lt;http://zetcode.com/python/requests/&gt;


import urllib.request
import json

req = urllib.request.Request(&quot;https://adresse.com&quot;)
with urllib.request.urlopen(req) as f:
    response = f.read()
    data = json.loads(response.decode(&#039;utf-8&#039;)…</description>
    </item>
    <item rdf:about="https://wiki.ph-sw.fr/doku.php?id=python:images&amp;rev=1617548516&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2021-04-04T15:01:56+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>images</title>
        <link>https://wiki.ph-sw.fr/doku.php?id=python:images&amp;rev=1617548516&amp;do=diff</link>
        <description>Manipulation d&#039;images avec Python

Concaténer des images

Source


from PIL import Image

im1 = Image.open(&#039;data/src/lena.jpg&#039;)
dst = Image.new(&#039;RGB&#039;, (im1.width + im1.width, im1.height))
dst.paste(im1, (0, 0))
dst.paste(im1, (im1.width, 0))
dst.save(&#039;data/dst/pillow_concat_h.jpg&#039;)</description>
    </item>
    <item rdf:about="https://wiki.ph-sw.fr/doku.php?id=python:math-snippets&amp;rev=1629814243&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2021-08-24T14:10:43+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>math-snippets</title>
        <link>https://wiki.ph-sw.fr/doku.php?id=python:math-snippets&amp;rev=1629814243&amp;do=diff</link>
        <description>Snippets de fonctions mathématiques en Python

Tests statistiques

	*  &lt;https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind_from_stats.html&gt;
	*  &lt;https://machinelearningmastery.com/statistical-hypothesis-tests-in-python-cheat-sheet/&gt;

linspace

Remplacement de la fonction linspace de NumPy (source):


def linspace(a, b, n=1):
    if n &lt; 2:
        return b
    diff = (float(b) - a)/(n - 1)
    return [diff * i + a  for i in range(n)]

$y=ax+b$$a=\frac{y_1-y_2}{x_1-x_2}$$b …</description>
    </item>
    <item rdf:about="https://wiki.ph-sw.fr/doku.php?id=python:matplotlib&amp;rev=1728222451&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-10-06T13:47:31+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>matplotlib</title>
        <link>https://wiki.ph-sw.fr/doku.php?id=python:matplotlib&amp;rev=1728222451&amp;do=diff</link>
        <description>Matplotlib

	*  Scientific Visualization: Python + Matplotlib
	*  Fonts/sizes in matplotlib figures for LaTeX publications
	*  &lt;https://datavizcatalogue.com/FR/&gt;

Un simple graphique


import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [e**2 for e in x]

plt.plot(x, y) # un plt.plot par courbe à afficher
plt.show()


Ajouter un titre et légender les axes


import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [e**2 for e in x]

fig, ax = plt.subplots()

plt.plot(x, y)

ax.set(xlabel=&#039;X&#039;…</description>
    </item>
    <item rdf:about="https://wiki.ph-sw.fr/doku.php?id=python:modules&amp;rev=1640426447&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2021-12-25T10:00:47+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>modules</title>
        <link>https://wiki.ph-sw.fr/doku.php?id=python:modules&amp;rev=1640426447&amp;do=diff</link>
        <description>Gestion des modules Python

Vérifier qu&#039;un module puisse être chargé

Source

S&#039;assurer qu&#039;il existe :


import importlib
spam_spec = importlib.util.find_spec(&quot;spam&quot;)
found = spam_spec is not None


Importer un module d&#039;un autre dossier

	*  Ajouter un fichier vide</description>
    </item>
    <item rdf:about="https://wiki.ph-sw.fr/doku.php?id=python:numpy&amp;rev=1731585489&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-11-14T11:58:09+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>numpy</title>
        <link>https://wiki.ph-sw.fr/doku.php?id=python:numpy&amp;rev=1731585489&amp;do=diff</link>
        <description>NumPy

Multiplication de matrices

C&#039;est la fonction matmul().

Tester l&#039;égalité de deux matrices

Source


if (a == b).all():
    print(&quot;a == b&quot;)
else:
    print(&quot;a != b&quot;)</description>
    </item>
    <item rdf:about="https://wiki.ph-sw.fr/doku.php?id=python:packaging&amp;rev=1647609989&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-03-18T13:26:29+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>packaging</title>
        <link>https://wiki.ph-sw.fr/doku.php?id=python:packaging&amp;rev=1647609989&amp;do=diff</link>
        <description>Packaging de modules Python

Version de base

	*  &lt;https://packaging.python.org/en/latest/tutorials/packaging-projects/&gt;
		*  &lt;https://setuptools.pypa.io/en/latest/index.html&gt;

Arborescence :


.
├── pyproject.toml
├── setup.cfg
└── src
    └── example_package
        ├── example.py
        └── __init__.py



[build-system]
requires = [
    &quot;setuptools&gt;=42&quot;,
    &quot;wheel&quot;
]
build-backend = &quot;setuptools.build_meta&quot;</description>
    </item>
    <item rdf:about="https://wiki.ph-sw.fr/doku.php?id=python:pandas&amp;rev=1698665179&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-10-30T11:26:19+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>pandas</title>
        <link>https://wiki.ph-sw.fr/doku.php?id=python:pandas&amp;rev=1698665179&amp;do=diff</link>
        <description>Pandas

	*  &lt;https://berthub.eu/articles/posts/from-gnuplot-to-matplotlib-pandas/&gt;

Informations sur un dataframe

Le haut du dataframe :


df.head()


Le bas du dataframe :


df.tail()


Les colonnes dans un dataframe :


df.columns


Afficher tout le dataframe (source) :


print(df.to_markdown())  # il faut installer le paquet tabulate / python3-tabulate</description>
    </item>
    <item rdf:about="https://wiki.ph-sw.fr/doku.php?id=python:pickle&amp;rev=1628683007&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2021-08-11T11:56:47+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>pickle</title>
        <link>https://wiki.ph-sw.fr/doku.php?id=python:pickle&amp;rev=1628683007&amp;do=diff</link>
        <description>Pickle

Utilisation basique

Source


import pickle
import os

data = None
if os.path.exists(&quot;data.pickle&quot;):
    with open(&quot;data.pickle&quot;, &quot;rb&quot;) as f:
        data = pickle.load(f)
else:
    data = [1, 2, 3, 4]
    with open(&quot;data.pickle&quot;, &quot;wb&quot;) as f:
        pickle.dump(data, f)</description>
    </item>
    <item rdf:about="https://wiki.ph-sw.fr/doku.php?id=python:pip&amp;rev=1677147130&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-02-23T10:12:10+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>pip</title>
        <link>https://wiki.ph-sw.fr/doku.php?id=python:pip&amp;rev=1677147130&amp;do=diff</link>
        <description>Pip

	*  Source

Lister les paquets installés

La syntaxe est la même que celle du fichier requirements.txt:


pip3 freeze


Installer les paquets


sudo pip3 install -r requirements.txt


Il est possible d&#039;installer le paquet correspondant à une PR particulière sur GitHub (</description>
    </item>
    <item rdf:about="https://wiki.ph-sw.fr/doku.php?id=python:pymysql&amp;rev=1617548516&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2021-04-04T15:01:56+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>pymysql</title>
        <link>https://wiki.ph-sw.fr/doku.php?id=python:pymysql&amp;rev=1617548516&amp;do=diff</link>
        <description>PyMySQL

	*  SQL
	*  &lt;https://github.com/PyMySQL/PyMySQL&gt;

----------

Installation


pip install PyMySQL


----------

Exemple minimaliste


import pymysql.cursors

# Connect to the database
connection = pymysql.connect(host=&#039;localhost&#039;,
                             user=&#039;user&#039;,
                             password=&#039;passwd&#039;,
                             db=&#039;db&#039;,
                             charset=&#039;utf8mb4&#039;,
                             cursorclass=pymysql.cursors.DictCursor)

try:
    with c…</description>
    </item>
    <item rdf:about="https://wiki.ph-sw.fr/doku.php?id=python:tests&amp;rev=1639643253&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2021-12-16T08:27:33+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>tests</title>
        <link>https://wiki.ph-sw.fr/doku.php?id=python:tests&amp;rev=1639643253&amp;do=diff</link>
        <description>Tests unitaires en Python

	*  &lt;https://docs.python.org/3/library/unittest.html&gt;

Utilisation de base


import unittest

class TestMachin(unittest.TestCase):
    def test_machin_a(self):
        self.assertEqual(2, 2)


    def test_machin_b(self):
        self.assertEqual(1, 1)


if __name__ == &#039;__main__&#039;:
    unittest.main()</description>
    </item>
</rdf:RDF>
