I moduli di estensione non dovrebbero mai chiamare setlocale(), se non per individuare la localizzazione corrente. Ma poiché il valore restituito può venire usato in modo portabile solo per ripristinarlo, questo non è molto utile (eccetto forse che per capire se la localizzazione è "C" oppure no).
Quando Python è incluso in una applicazione, se l'applicazione imposta la localizzazione a qualcosa di specifico prima di inizializzare Python, questo generalmente va bene, e Python userà qualsiasi localizzazione impostata, ad eccezione di LC_NUMERIC che dovrebbe essere sempre impostata a "C".
La funzione setlocale() nel modulo locale dà al programmatore Python l'impressione che possa manipolare le impostazioni locali di LC_NUMERIC, ma questo non è il caso a livello di C: il codice C troverà sempre che l'impostazione locale di LC_NUMERIC è posta a "C". Questo perché troppe cose verrebbero rovinate qualora il carattere di punto decimale venisse impostato su qualcosa di diverso che non sia il punto (per esempio il parser di Python si interromperebbe). Avvertenze: I thread che vengono eseguiti senza tenere conto del lock globale dell'interprete Python, possono occasionalmente trovare delle differenze nelle impostazioni numeriche della localizzazione; questo perché l'unico modo portabile per implementare tale caratteristica è quello di impostare la localizzazione numerica sulle impostazioni richieste dall'utente, estraendo le caratteristiche rilevanti, e quindi ripristinando la localizzazione numerica a "C".
Quando il codice Python usa il modulo locale per cambiare la localizzazione, vengono influenzate anche le applicazioni incorporate. Se l'applicazione incorporata non vuole che questo accada, dovrebbe rimuovere il modulo di estensione _locale (che in pratica fa tutto il lavoro) dalla tavola dei moduli built-in nel file config.c, e accertandosi che il modulo _locale non sia accessibile dalle librerie condivise.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.