Pythonのロケール奇妙なエラー。ここでは正確に何が起こっているのですか?
-
11-09-2019 - |
質問
だから、今日、私は2.0.2をバザーにアップグレードし、私はこのメッセージを(私はところで、ユキヒョウによ)受信を開始します:
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.
私のLANGが実際に空であることから、非常に奇妙な。私は、ロケールモジュール
といじくり回すしようとすると、同様の事が起こります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をエクスポートしても解決しない。
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.
しかし、これは問題を解決します。
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')
あなたがより良いgooglabilityのために、ここで何が起こっているかを説明してくださいもらえますか?
解決
2016 UPDATE:非常に、これは、少なくとも2013年以来、Pythonのバグであることが判明おそらくそれ以前も、非GNUロケールによく反応していないPythonで構成される - のMac OS XやBSD系に見られるように。バグはまだ2016年9月のように開いており、すべてのPythonのバージョンに影響を与えます。
<時間> 何LANG
環境変数セットがなかった場合は、、チャンスはあなたが(設定されている場合よりも優先されますする)有効なOS XのロケールではありませんLC_CTYPE
に設定した環境変数を、LC_ALL
(キー変数)またはUTF-8
のいずれかを持っていたされています。あなたのケースでは、それは10.6 SDK(おそらくも10.5 SDK)で構築されたように、それは、アップルが提供する/usr/bin/python
またはカスタムのpythonで再現することは簡単です。あなたはpython.orgパイソンでそのように再現することはできません。彼らは現在のロケールのAPIが異なる動作を10.4 SDKで構築されています。
$ 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ます:
パズルの別の部分があるかもしれません。私がインストールされているbzr
2.0.1で簡単に見にlocale.getpreferredencoding()
がlocale.Error
を提起する場合は、引用するメッセージのみが表示されることを示します。 Pythonの_locale.so
のC拡張をロードすることはできませんし、その上にパーミッションの問題がある場合はそれが起こることができる場合に発生することができます一つの方法です。例えば、MacPortsのは、現在持っていることが知られている問題権限を設定、カスタマイズのumask を持っている場合。私はその問題によって自分自身を燃やしてきました。 Pythonの_locale.so
ディレクトリにlib/python2.5/lib-dynload
のパーミッションを確認し、それが755
であることを確認してください。 MacPortsのための完全なパスをする必要があります:
/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload/
他のヒント
私は同じ問題に直面しました。私はlocale
を実行したとき、私はLANG
とLC_ALL
が未設定だったことに気づきました。だから私は.bash_profile
ファイルに以下の行を追加することで、これを固定します:
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
そして、私は単に走っます:
source ~/.bash_profile
そして、この問題は私のMac上でその後修正されました。
これは、Mac OS Xの問題です。あなたのロケール設定を確認するには、ターミナルでlocale
を実行します。 locale -a
あなたは(あなたがLC_ALLへの引数として使用できることに)定義されているすべてのロケールをリストする必要があります。
そのLC_ALL
に注意して定義されたときに、他のLC_*
変数はLANG
よりも優先されます。