web-dev-qa-db-ja.com

pip install - locale.Error:サポートされていないロケール設定

フルスタックトレース:

➜  ~ pip install virtualenv
Traceback (most recent call last):
  File "/usr/bin/pip", line 11, in <module>
    sys.exit(main())
  File "/usr/lib/python3.4/site-packages/pip/__init__.py", line 215, in main
    locale.setlocale(locale.LC_ALL, '')
  File "/usr/lib64/python3.4/locale.py", line 592, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting

同じサーバー上で、私はpip install virtualenvをpython 2.7.xでうまく動かしました。

今、私はcurl https://bootstrap.pypa.io/get-pip.py | python3.4を使ってpython3.4をインストールしました。

➜  ~ pip --version
pip 8.1.1 from /usr/lib/python3.4/site-packages (python 3.4)

pip uninstall virtualenvも同じエラーを投げます

196
ericn

根本的な原因は次のとおりです。あなたの環境変数LC_ALLが見つからないか、どういうわけか無効です

短い答え-

次のコマンドを実行するだけです。

$ export LC_ALL=C

新しいターミナルウィンドウでエラーが発生し続ける場合は、それを.bashrcファイルの末尾に追加してください。

長い答え -

これが私のlocaleの設定です。

$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C

Python2.7

    $ uname -a
    Linux debian 3.16.0-4-AMD64 #1 SMP Debian 3.16.7-ckt11-1+deb8u6 (2015-11-09) x86_64 GNU/Linux
    $ python --version
    Python 2.7.9
    $ pip --version
    pip 8.1.1 from /usr/local/lib/python2.7/dist-packages (python 2.7)
    $ unset LC_ALL
    $ pip install virtualenv
    Traceback (most recent call last):
      File "/usr/local/bin/pip", line 11, in <module>
        sys.exit(main())
      File "/usr/local/lib/python2.7/dist-packages/pip/__init__.py", line 215, in main
        locale.setlocale(locale.LC_ALL, '')
      File "/usr/lib/python2.7/locale.py", line 579, in setlocale
        return _setlocale(category, locale)
    locale.Error: unsupported locale setting
    $ export LC_ALL=C
    $ pip install virtualenv
    Requirement already satisfied (use --upgrade to upgrade): virtualenv in /usr/local/lib/python2.7/dist-packages
525
ROY

次のコマンドを実行してください(動作します)。

export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
Sudo dpkg-reconfigure locales
32
Rahi.Shah

誰かがそれを役に立つと思うかもしれません。そのロケール設定を通常はホームディレクトリにある.bashrcファイルに入れることができます。
このコマンドを.bashrcに追加するだけです。
export LC_ALL=C
次にsource .bashrcと入力します。
これで、例えばssh経由で接続するときに、毎回このコマンドを手動で呼び出す必要がなくなります。

26
Ivan Semochkin

Env変数をエクスポートするロケールを設定することはできますが、セッションを開始するたびにそれを行う必要があります。このようにロケールを設定すると、問題が恒久的に解決されます。

Sudo apt-get install locales
Sudo locale-gen en_US.UTF-8
Sudo echo "LANG=en_US.UTF-8" > /etc/default/locale
2
Marco Lavagnino

[この回答はLinuxプラットフォームのみを対象としています]

最初に知っておくべきことは、ほとんどのロケール設定ファイルにあるパスはlocaledef --helpから取得できることです:

$ localedef --help | tail -n 5
System's directory for character maps : /usr/share/i18n/charmaps
                       repertoire maps: /usr/share/i18n/repertoiremaps
                       locale path    : /usr/lib/locale:/usr/share/i18n
For bug reporting instructions, please see:
<https://bugs.launchpad.net/ubuntu/+source/glibc/+bugs>

最後の/usr/share/i18nを参照してください?これは、xx_XX.UTF-8構成ファイルの場所です。

$ ls /usr/share/i18n/locales/zh_*
/usr/share/i18n/locales/zh_CN  /usr/share/i18n/locales/zh_HK  /usr/share/i18n/locales/zh_SG  /usr/share/i18n/locales/zh_TW

それで ?それらをアーカイブバイナリにコンパイルする必要があります。方法の1つ、たとえば私が/usr/share/i18n/locales/en_LOVEを持っていると仮定すると、それをコンパイルリスト、つまり/etc/locale-genファイルに追加できます:

$ tail -1 /etc/locale.gen 
en_LOVE.UTF-8 UTF-8

Sudo locale-genでバイナリにコンパイルします:

$ Sudo locale-gen 
Generating locales (this might take a while)...
  en_AG.UTF-8... done
  en_AU.UTF-8... done
  en_BW.UTF-8... done
  ...
  en_LOVE.UTF-8... done
Generation complete.

そして、システムのデフォルトのロケールを希望のLANGLC_ALL ... etcで更新し、次のupdate-localeを使用します。

Sudo update-locale LANG=en_LOVE.UTF-8

update-localeは、実際には、この/etc/default/localeファイルを更新することも意味します。このファイルは、セットアップ時に環境変数へのログイン時にシステムによってソースされます。

$ head /etc/default/locale 
#  File generated by update-locale
LANG=en_LOVE.UTF-8
LC_NUMERIC="en_US.UTF-8"
...

ただし、有効にするために再起動したくない場合があるため、現在のシェルセッションの環境変数にソースすることができます。

$ . /etc/default/locale

Sudo dpkg-reconfigure localesはどうですか?それをいじると、このコマンドが基本的に上記の手順を簡素化するGUIとして機能することがわかります。つまり、/etc/locale.gen-> Sudo locale-gen-> Sudo update-locale LANG=en_LOVE.UTF-8を編集します。

Pythonの場合、/etc/locale.genにそのロケール候補が含まれ、locale.genがコンパイルされる限り、setlocale(category, locale)はスローせずに動作しますlocale.Error: unsupoorted locale settingen_US.UTF-8ファイルを観察することで、setlocale()に設定される正しい文字列en_US/....etc//etc/locale.genを確認し、必要に応じてコメントを外してコンパイルできます。そのファイルにzh_CN GB2312ドットなしの場合、正しい文字列はzh_CNおよびzh_CN.GB2312です。

2
林果皞

Dockerfileのために、これは私のために働きます:

RUN locale-gen en_US.UTF-8  
ENV LANG en_US.UTF-8  
ENV LANGUAGE en_US:en  
ENV LC_ALL en_US.UTF-8  

Locale-genのインストール方法

docker ubuntu/bin/sh:1:locale-gen:が見つかりません

2
Ben

私は同じ問題を抱えています、そして"export LC_ALL=c" は私のために働きませんでした
export LC_ALL="en_US.UTF-8"を試してください(うまくいきます)。

0
Benyamin Jafari

エラーメッセージはロケール設定に問題があることを示しています。他の答えで示されているようにこれを修正するためにはあなたのロケールを変更する必要があります。

Mac OS X Sierraでは、これを行う最善の方法は~/bash_profileファイルを次のように変更することです。

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

source ~/.bash_profileを使用してbashプロファイルをリロードしない限り、この変更は現在のcliセッションですぐには明らかになりません。

この答えは、私が他の同一ではない、重複しない質問(すなわち、pipenvに関連しない質問)に投稿した答えに非常に近いですが、同じ解決策が必要になることがあります。

モデレーターへ:私の以前の答えはこの理由で削除されましたが、エラーが「ロケールの問題」である時はいつもいつもこの答えが当てはまるのでちょっとばかげていたと思います。そのエラーです。

そのため、A)質問を重複としてマークすることは意味がありません。また、B)回答を調整することは意味がありません。

0
geoidesic

Ubuntu:

$ Sudo vi /etc/default/locale

ファイルの最後に以下の設定を追加してください。

LC_ALL = en_US.UTF-8

0
saneryee