pip install-로케일 오류 : 지원되지 않는 로케일 설정


232

전체 스택 추적 :

  ~ 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 virtualenvPython 2.7.x를 성공적으로 실행 했습니다.

이제 방금을 사용하여 python3.4를 설치했습니다 curl https://bootstrap.pypa.io/get-pip.py | python3.4.

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

pip uninstall virtualenv 같은 오류가 발생합니다


2
이거 아직 읽었 어 ?
idjaw

예 나는 그것이 내 경우에는 빈 문자열이 있다고 @idjaw, 노드를 가지고, 당신이 지적 잘못된 로케일에서 다르다
ericn을

네, 알아 차 렸습니다. pkg-reconfigure를 시도 했습니까?
idjaw

내 서버는 우분투 @idjaw가 아닌 ​​centos입니다. 확인한 결과 로컬에 아무런 문제가없는 것 같습니다LANG=en_GB.utf8
ericn

답변:


616

근본 원인은 다음과 같습니다. 환경 변수 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

파이썬 2.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

5
그렇다면 환경 변수를 설정하는 것의 문제입니까? 내가 왜 이런 일을 겪어 본 적이 없는지 아십니까? 이 값을 자동으로 설정하지 않아야합니까?
ericn

@eric 안녕, 난 그냥 내 게시물을 업데이트합니다. 이 문제는 내 컴퓨터의 python2.7에서 발생합니다.
ROY

실제로 @ROY가 매우 흥미 롭습니다. 거의 2 대의 서버에이 서버를 설치했으며 완벽하게 작동했습니다
ericn

letsencrypt-auto를 사용 하여이 문제를 겪고 export LC_ALL=C도움 을 받았습니다 .
maniexx

10
무슨 LC_ALL=C의미 인지 궁금하다면 여기를 참조 하십시오 .
Garrett

41

다음 명령을 실행하십시오 (작동합니다).

export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales

(-1)이 dpkg-reconfigure명령은 데비안 기반 시스템에서 사용하기위한 것입니다. 이 질문 centos에는 epel-release저장소 를 활성화 하고 dpkg-devel& dpkg-dev패키지를 설치 하지 않는 한 dpkg를 지원하지 않는 RHEL 파생물 인 태그가 붙어 있습니다 . 그럼에도 불구하고 이것은 이상적인 솔루션이 아닙니다.

30

누군가 유용하다고 생각할 수도 있습니다. 이러한 로케일 설정은 일반적으로 홈 디렉토리에있는 .bashrc 파일에 넣을 수 있습니다.
.bashrc 에이 명령을 추가하십시오 :
export LC_ALL=C
다음을 입력 source .bashrc
하십시오. 예를 들어 ssh를 통해 연결할 때마다 매번이 명령을 수동으로 호출 할 필요가 없습니다.


4

env 변수를 내보내는 로케일을 설정할 수 있지만 세션을 시작할 때마다 설정해야합니다. 이 방법으로 로케일을 설정하면 문제점이 영구적으로 해결됩니다.

sudo apt-get install locales
sudo locale-gen en_US.UTF-8
sudo echo "LANG=en_US.UTF-8" > /etc/default/locale

내가 오해하거나 sudo설치하려고하는 것과 같은 줄을 사용하고 있습니까? sudo apt-get install ... sudo ...
CyberEd

2
@CyberEd, 맞습니다. 필요하지 않은 종속성을 제거하기 위해 예제를 편집했습니다.
Marco Lavagnino

3

[이 답변은 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

이제 뭐 ? 아카이브 바이너리로 컴파일해야합니다. 방법 중 하나, 예를 들어 내가 있다고 가정 /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이로 등 ... 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

파이썬의 경우, /etc/locale.gen로케일 후보가 포함되어 locale.gen있고 컴파일되는 한 setlocale(category, locale)throw없이 작동해야합니다 locale.Error: unsupoorted locale setting. 파일 을 관찰 하여 올바른 문자열 en_US.UTF-8/ en_US/....etc을 설정할 수 있는지 확인한 다음 주석을 해제하고 원하는대로 컴파일하십시오. 해당 파일에 점이 없으면 올바른 문자열은 및 입니다.setlocale()/etc/locale.genzh_CN GB2312zh_CNzh_CN.GB2312


내 상황에 대한 짧은 대답은 다음과 같습니다. 1. 편집 /etc/locale.gen, zh_CN.UTF-8줄 주석 처리를 제거하십시오 . 2 sudo locale-gen.
SnowOnion


2

나는 같은 문제가 있었고 나를 위해 일하지 않았다 ."export LC_ALL=c"

시도하십시오 export LC_ALL="en_US.UTF-8"(작동합니다).


1

오류 메시지는 로케일 설정에 문제가 있음을 나타냅니다. 다른 답변으로 표시된대로이 문제를 해결하려면 로캘을 수정해야합니다.

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"

다음을 사용하여 bash 프로파일을 다시로드하지 않으면 현재 cli 세션에서이 변경 사항이 즉시 나타나지 않습니다 source ~/.bash_profile.

이 답변은 내가 동일하지 않은 중복되지 않는 다른 질문 (예 : pipenv와 관련이 없음)에 게시했지만 동일한 솔루션이 필요한 답변과 매우 비슷합니다.

중재자에게 : 내 이전 답변이 이러한 이유로 삭제되었지만 실제로이 답변은 오류가 "로케일에 문제가 있음"일 때마다 거의 적용되기 때문에 약간 어리석은 느낌이 들지만 트리거 할 수있는 여러 가지 상황, 언어 및 환경이 있습니다. 그 오류.

따라서 A)는 질문을 중복으로 표시하는 것이 합리적이지 않으며 B) 수정이 매우 간단하고 각 경우에 동일하며 장식의 이점이 없기 때문에 답을 맞추는 것이 합리적이지 않습니다.


1

우분투 :

$ sudo vi /etc/default/locale

파일 끝에 아래 설정을 추가하십시오.

LC_ALL = en_US.UTF-8

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.