errore strano nella localizzazione di Python.cosa sta succedendo qui esattamente?
-
11-09-2019 - |
Domanda
Quindi oggi ho effettuato l'aggiornamento a Bazaar 2.0.2 e ho iniziato a ricevere questo messaggio (sono su Snow Leopard, tra l'altro):
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 è effettivamente vuoto.Una 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
sbo@dhcp-045:~ $ export LANG=en_US.UTF-8
sbo@dhcp-045:~ $ 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
sbo@dhcp-045:~ $ export LANG=en_US.UTF-8
sbo@dhcp-045:~ $ 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')
Potresti spiegare cosa sta succedendo qui, per una migliore googlabilità?
Soluzione
AGGIORNAMENTO 2016:Si scopre che questo è un bug di Python almeno dal 2013, molto probabilmente anche prima, consistente nel fatto che Python non reagisce bene alle localizzazioni non GNU, come quelle trovate in Mac OS X e BSD.Il bug è ancora aperto a settembre 2016 e interessa ogni versione di Python.
Se non ci fosse LANG
variabile d'ambiente impostata, è probabile che tu abbia un file LC_CTYPE
(la variabile chiave) o LC_ALL
(che sovrascrive se impostata) variabile di ambiente impostata su UTF-8
, che non è una locale OS X valida.È abbastanza facile da riprodurre con quello fornito da Apple /usr/bin/python
o con un Python personalizzato, come nel tuo caso, creato con l'SDK 10.6 (probabilmente anche l'SDK 10.5).Non sarai in grado di riprodurlo in questo modo con un pitone python.org;sono attualmente creati con l'SDK 10.4 in cui 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')
>>>
MODIFICARE:
Potrebbe esserci un altro pezzo del puzzle.Una rapida occhiata a bzr
2.0.1 Ho installato indica che il messaggio che citi dovrebbe apparire solo se locale.getpreferredencoding()
solleva un locale.Error
.Un modo in cui ciò può accadere è se il file python _locale.so
L'estensione C non può essere caricata e ciò può accadere se ci sono problemi di autorizzazione su di essa.Ad esempio, attualmente è noto che MacPorts ha problemi nell'impostazione delle autorizzazioni se si dispone di una umask personalizzata;Anch'io sono stato scottato da questo problema.Controlla i permessi di _locale.so
nel pitone lib/python2.5/lib-dynload
directory e assicurati che lo sia 755
.Il percorso completo per MacPorts dovrebbe essere:
/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload/
Altri suggerimenti
Ho affrontato lo stesso problema.Quando correvo locale
, ho notato che il LANG
E LC_ALL
erano non impostati.Quindi ho risolto questo problema aggiungendo le seguenti righe nel file .bash_profile
file:
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 successivamente sul mio Mac.
È un problema di Mac OS X.Per visualizzare le impostazioni locali, esegui locale
nel terminale. locale -a
dovrebbe elencare tutte le localizzazioni che hai definito (che puoi usare come argomento per LC_ALL).
Notare che LC_ALL
e altro LC_*
le variabili hanno la precedenza LANG
quando definito.