python localidade de erro estranha. o que está acontecendo aqui exatamente?
-
11-09-2019 - |
Pergunta
Então, hoje eu atualizado para o bazar 2.0.2, e comecei a receber esta mensagem (eu estou em leopardo da neve, btw):
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.
muito estranho, já que minha LANG é realmente esvaziar. Algo semelhante acontece quando tento mexer com a localidade módulo
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
LANG exportação não ajuda
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.
No entanto, isso resolveu o 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')
Você poderia explicar o que está acontecendo aqui, para melhor googlability?
Solução
2016 Update: Acontece que este é um bug Python, pelo menos desde 2013, muito provavelmente mais cedo também, que consiste em Python não reagir bem ao não-GNU locales - como os encontrados em Mac oS X e os BSDs. O bug ainda está aberta a partir de setembro de 2016, e afeta todas as versões Python.
Se não houvesse conjunto variável de ambiente LANG
, as chances são que você teve tanto uma LC_CTYPE
(a variável-chave) ou LC_ALL
(que substitui se configurada) variável de ambiente definido para UTF-8
, que não é um OS X localidade válida. É fácil o suficiente para reproduzir com o /usr/bin/python
fornecida pela Apple ou com uma python costume, como no seu caso, que foi construído com o 10,6 SDK (provavelmente também a 10,5 SDK). Você não será capaz de reproduzi-lo dessa forma com uma python python.org; que atualmente são construídos com o 10,4 SDK onde as APIs localidade comportar de maneira diferente.
$ 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:
Pode haver outra peça do quebra-cabeça. Um rápido olhar para o bzr
2.0.1 Eu tenho instalado indica que a mensagem que você citar só deve aparecer se locale.getpreferredencoding()
levanta uma locale.Error
. Uma maneira que pode acontecer é se a extensão python _locale.so
C não pode ser carregado e que pode acontecer se houver problemas de permissão sobre ele. Por exemplo, MacPorts atualmente é conhecido por ter problemas para configurar permissões se você tiver um personalizado umask ; Eu fui queimado por essa questão sozinho. Verifique as permissões de _locale.so
no diretório lib/python2.5/lib-dynload
python e garantir que ele é 755
. O caminho completo para MacPorts deve ser:
/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload/
Outras dicas
Eu enfrentei o mesmo problema. Quando eu corri locale
, notei que o LANG
e LC_ALL
foram desactivado. Então eu fixo isso adicionando as seguintes linhas no arquivo .bash_profile
:
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
Então, eu simplesmente dizia:
source ~/.bash_profile
E este problema foi corrigido posteriormente no meu Mac.
É um problema Mac OS X. Para ver suas configurações de localização, locale
executar em terminal. locale -a
deve listar todos os locais que você definiu (que você pode usar como argumento para LC_ALL).
Observe que LC_ALL
e outros LC_*
variáveis ??têm precedência sobre LANG
quando definido.