フルスタックトレース:
➜ ~ 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
も同じエラーを投げます
根本的な原因は次のとおりです。あなたの環境変数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
次のコマンドを実行してください(動作します)。
export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
Sudo dpkg-reconfigure locales
誰かがそれを役に立つと思うかもしれません。そのロケール設定を通常はホームディレクトリにある.bashrcファイルに入れることができます。
このコマンドを.bashrcに追加するだけです。export LC_ALL=C
次にsource .bashrc
と入力します。
これで、例えばssh経由で接続するときに、毎回このコマンドを手動で呼び出す必要がなくなります。
Env変数をエクスポートするロケールを設定することはできますが、セッションを開始するたびにそれを行う必要があります。このようにロケールを設定すると、問題が恒久的に解決されます。
Sudo apt-get install locales
Sudo locale-gen en_US.UTF-8
Sudo echo "LANG=en_US.UTF-8" > /etc/default/locale
[この回答は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.
そして、システムのデフォルトのロケールを希望のLANG
、LC_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 setting
。 en_US.UTF-8
ファイルを観察することで、setlocale()
に設定される正しい文字列en_US/....etc
//etc/locale.gen
を確認し、必要に応じてコメントを外してコンパイルできます。そのファイルにzh_CN GB2312
ドットなしの場合、正しい文字列はzh_CN
およびzh_CN.GB2312
です。
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のインストール方法
私は同じ問題を抱えています、そして"export LC_ALL=c"
は私のために働きませんでした 、export LC_ALL="en_US.UTF-8"
を試してください(うまくいきます)。
エラーメッセージはロケール設定に問題があることを示しています。他の答えで示されているようにこれを修正するためにはあなたのロケールを変更する必要があります。
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)回答を調整することは意味がありません。
Ubuntu:
$ Sudo vi /etc/default/locale
ファイルの最後に以下の設定を追加してください。
LC_ALL = en_US.UTF-8