2009-12-02 20 views
28

Così oggi ho aggiornato a 2.0.2 bazar, e ho cominciato a ricevere questo messaggio (io sono su leopardo delle nevi, btw):errore strano locale python. cosa sta succedendo qui esattamente?

bzr: warning: unknown locale: UTF-8 
    Could not determine what text encoding to use. 
    This error usually means your Python interpreter 
    doesn't support the locale set by $LANG (en_US.UTF-8) 
    Continuing with ascii encoding. 

molto strano, dato che il mio LANG è in realtà vuota. Cosa simile accade quando provo ad armeggiare con il modulo locale

Python 2.5.4 (r254:67916, Nov 30 2009, 14:09:22) 
[GCC 4.3.4] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import locale 
>>> locale.getdefaultlocale() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Users/sbo/runtimes/lib/python2.5/locale.py", line 443, in getdefaultlocale 
    return _parse_localename(localename) 
    File "/Users/sbo/runtimes/lib/python2.5/locale.py", line 375, in _parse_localename 
    raise ValueError, 'unknown locale: %s' % localename 
ValueError: unknown locale: UTF-8 

esportare LANG non aiuta

[email protected]:~ $ export LANG=en_US.UTF-8 
[email protected]:~ $ bzr 
bzr: warning: unknown locale: UTF-8 
    Could not determine what text encoding to use. 
    This error usually means your Python interpreter 
    doesn't support the locale set by $LANG (en_US.UTF-8) 
    Continuing with ascii encoding. 

Tuttavia, questo ha risolto il problema

[email protected]:~ $ export LANG=en_US.UTF-8 
[email protected]:~ $ export LC_ALL=en_US.UTF-8 

Python 2.5.4 (r254:67916, Nov 30 2009, 14:09:22) 
[GCC 4.3.4] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import locale 
>>> locale.getdefaultlocale() 
('en_US', 'UTF8') 

Potrebbe spiegare cosa sta succedendo qui, per una migliore googlability?

+0

Ulteriori informazioni sul problema? –

+0

+1 le due righe "export" hanno reso il mio "ValueError: unknown locale: ..." andare via. – Bogatyr

+0

Grazie mille per queste ultime due righe. Mi ha salvato e sono sicuro che molti altri utenti Mac hanno molto tempo. –

risposta

16

AGGIORNAMENTO 2016: Risulta che this is a Python bug almeno dal 2013, molto probabilmente anche in precedenza, consistente in Python che non reagisce bene alle versioni locali non GNU, come quelle che si trovano in Mac OS X e nei BSD. Il bug è ancora aperto a settembre 2016 e riguarda ogni versione di Python.


Se non ci fosse LANG ambiente variabile impostata, è probabile che hai avuto sia un LC_CTYPE (la variabile chiave) o LC_ALL (che ignora se impostato) variabile d'ambiente impostata UTF-8, che non è un locale OS X valida . È abbastanza facile da riprodurre con lo /usr/bin/python fornito da Apple o con un python personalizzato, come nel tuo caso, che è stato creato con l'SDK 10.6 (probabilmente anche l'SDK 10.5). Non sarai in grado di riprodurlo in questo modo con python.org python; sono attualmente costruiti con l'SDK 10.4 dove le API locali si comportano diversamente.

$ unset LANG 
$ env | grep LC_ 
$ export LC_CTYPE="UTF-8" 
$ /usr/bin/python # Apple-supplied python 
Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import locale ; locale.getdefaultlocale() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py", line 459, in getdefaultlocale 
    return _parse_localename(localename) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py", line 391, in _parse_localename 
    raise ValueError, 'unknown locale: %s' % localename 
ValueError: unknown locale: UTF-8 
^D 
$ /usr/local/bin/python2.6 # python.org python 
Python 2.6.4 (r264:75821M, Oct 27 2009, 19:48:32) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import locale ; locale.getdefaultlocale() 
(None, 'mac-roman') 
>>> 

EDIT:

Ci può essere un altro pezzo del puzzle. Una rapida occhiata a bzr 2.0.1 che ho installato indica che il messaggio che citi dovrebbe apparire solo se locale.getpreferredencoding() solleva uno locale.Error. Un modo che può succedere è se non è possibile caricare l'estensione C python _locale.so e ciò può accadere se ci sono problemi di autorizzazione su di esso. Ad esempio, MacPorts attualmente è noto per avere problems setting permissions if you have a customized umask; Sono stato bruciato da quel problema me stesso. Verifica le autorizzazioni di _locale.so nella directory python lib/python2.5/lib-dynload e assicurati che sia 755. Il percorso completo per MacPorts dovrebbe essere:

/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload/ 
+0

Il pitone che sono l'utilizzo è installato a mano, non è l'installazione standard di Python in bundle con OSX. Inoltre, sembra che non abbia _locale.so o _locale.dylib .... eh? –

+0

Ci dovrebbe essere un _locale.so in lib-dynlib. In caso contrario, il tuo python non è stato compilato correttamente su OS X e locale.py ricadrà su alcuni comportamenti predefiniti. –

+0

@NedDeily, sembra che tu ora sappia meglio di ciò che questa risposta mostra, dal momento che hai fornito un'ottima spiegazione in https://bugs.python.org/issue18378#msg215215. Forse potresti aggiustare la tua risposta? (Per googlability, come richiesto dall'OP) – hmijail

4

Si tratta di un problema di Mac OS X. Per visualizzare le impostazioni locali, eseguire nel terminale. locale -a dovrebbe elencare tutte le impostazioni locali che è stato definito (che è possibile utilizzare come argomento per LC_ALL).

Si noti che LC_ALL e altre variabili LC_* hanno la precedenza su LANG quando definito.

+0

Più specificamente questo è un problema con l'ambiente non solo con Mac OS X. Linux e altri cloni UNIX sono inclini agli stessi problemi se si personalizza il proprio ambiente e si lasciano le cose inavvertitamente. A volte i problemi appaiono immediatamente, altre volte no, finché non hai davvero bisogno che funzionino. Ancora un altro sintomo di avere troppi modi per fare la stessa cosa ... – jathanism

+1

@synack: Questo è qualcosa che è emerso in precedenza con OS X, che è il motivo per cui * Non penso * sia perché Stefano ha cambiato il suo ambiente. – u0b34a0f6ae

+0

@ kaiser.se: Perché pensi che questo sia un problema e perché con OS X? Avere un set LC_CTYPE o LC_ALL spiega il comportamento visto dall'OP e funziona come documentato. L'esempio che ho dato fallisce esattamente nello stesso modo su un attuale sistema Debian Linux con l'eccezione che il più recente bash su quel sistema ti avverte quando esporti LC_CTYPE sul valore non valido "UTF-8". –

1

Ho affrontato lo stesso problema. Quando ho eseguito locale, ho notato che LANG e LC_ALL non erano impostati.Così ho fissato questo aggiungendo le seguenti righe nel file .bash_profile:

export LC_ALL=en_US.UTF-8 
export LANG=en_US.UTF-8 

Poi ho semplicemente eseguito:

source ~/.bash_profile 

E questo problema è stato risolto in seguito sul mio Mac.

Problemi correlati