cài đặt pip - locale.Error: cài đặt ngôn ngữ không được hỗ trợ


232

Ngăn xếp đầy đủ:

  ~ 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

Trên cùng một máy chủ, tôi đã chạy thành công pip install virtualenvvới python 2.7.x.

Bây giờ, tôi vừa cài đặt 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 ném lỗi tương tự


2
Bạn đã đọc cái này chưa?
idjaw

vâng tôi có @idjaw, nút đó là một chuỗi trống trong trường hợp của tôi, nó khác với ngôn ngữ sai mà bạn đã chỉ ra
ericn

Vâng, tôi đã nhận thấy rằng. Bạn đã thử cấu hình pkg chưa?
idjaw

máy chủ của tôi là centos, không Ubuntu @idjaw, tôi đã kiểm tra và có vẻ là không có gì sai với địa phương đó làLANG=en_GB.utf8
ericn

Câu trả lời:


616

Nguyên nhân gốc là: biến môi trường của bạn LC_ALLbị thiếu hoặc không hợp lệ bằng cách nào đó

Câu trả lời ngắn-

chỉ cần chạy lệnh sau:

$ export LC_ALL=C

Nếu bạn tiếp tục gặp lỗi trong các cửa sổ đầu cuối mới, hãy thêm nó vào cuối .bashrctệp.

Câu trả lời dài-

Đây là localecài đặt của tôi :

$ 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

5
Vì vậy, đó chỉ là vấn đề thiết lập một biến môi trường? Bạn có biết tại sao tôi chưa bao giờ gặp phải điều này trước đây? Không nên đặt giá trị này tự động?
ericn

@eric Xin chào, tôi chỉ cập nhật bài viết của mình. Vấn đề này xảy ra với python2.7 trên máy tính của tôi.
ROY

Thực sự rất thú vị @ROY, tôi đã có 2 máy chủ gần như thụt vào máy chủ này được thiết lập và chúng hoạt động rất tốt
ericn

Tôi đã gặp phải điều này khi sử dụng letencrypt-auto và export LC_ALL=Cđã giúp đỡ.
maniexx

10
Nếu bạn đang tự hỏi điều gì LC_ALL=Ccó nghĩa là, xem ở đây .
Garrett

41

Chạy lệnh sau (nó sẽ hoạt động):

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

(-1) dpkg-reconfigureLệnh này được thiết kế để sử dụng trên các hệ thống dựa trên Debian. Câu hỏi này được gắn thẻ centos, một dẫn xuất của RHEL không hỗ trợ cho dpkg trừ khi bạn kích hoạt epel-releasekho lưu trữ và cài đặt các gói dpkg-devel& dpkg-dev. Ngay cả khi đó, đây không phải là một giải pháp lý tưởng.

30

Ai đó có thể thấy nó hữu ích. Bạn có thể đặt các cài đặt ngôn ngữ đó trong tệp .bashrc, thường nằm trong thư mục chính.
Chỉ cần thêm lệnh này vào .bashrc:
export LC_ALL=C
sau đó nhập source .bashrc
Bây giờ bạn không cần phải gọi lệnh này theo cách thủ công mỗi lần, khi bạn kết nối qua ssh chẳng hạn.


4

Trong khi bạn có thể đặt ngôn ngữ xuất một biến env, bạn sẽ phải làm điều đó mỗi khi bạn bắt đầu một phiên. Đặt ngôn ngữ theo cách này sẽ giải quyết vấn đề vĩnh viễn:

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

Tôi có hiểu lầm không, hay bạn đang sử dụng sudotrên cùng một dòng mà bạn cố gắng cài đặt nó? sudo apt-get install ... sudo ...
CyberEd

2
@CyberEd, bạn nói đúng, tôi đã chỉnh sửa ví dụ để loại bỏ các phụ thuộc không cần thiết.
Marco Lavagnino

3

[Câu trả lời này chỉ nhắm mục tiêu trên nền tảng linux]

Điều đầu tiên bạn nên biết là hầu hết các tệp cấu hình cục bộ có thể lấy từ 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>

Xem lần cuối /usr/share/i18n? Đây là nơi chứa tệp cấu hình xx_XX.UTF-8 của bạn:

$ 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

Giờ thì sao ? Chúng ta cần biên dịch chúng thành lưu trữ nhị phân. Một trong những cách, ví dụ như giả sử tôi có /usr/share/i18n/locales/en_LOVE, tôi có thể thêm nó vào danh sách biên dịch, tức là /etc/locale-gentệp:

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

Và biên dịch nó thành nhị phân với 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.

Và bây giờ hãy cập nhật ngôn ngữ mặc định của hệ thống với mong muốn LANG, LC_ALL... vv với điều này update-locale:

sudo update-locale LANG=en_LOVE.UTF-8

update-localethực ra cũng có nghĩa là cập nhật /etc/default/localetệp này , nguồn sẽ được hệ thống đăng nhập để thiết lập các biến môi trường:

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

Nhưng chúng tôi có thể không muốn khởi động lại để có hiệu lực, vì vậy chúng tôi chỉ có thể nguồn nó cho biến môi trường trong phiên shell hiện tại:

$ . /etc/default/locale

Thế còn sudo dpkg-reconfigure locales? Nếu bạn chơi xung quanh nó, bạn sẽ biết lệnh này về cơ bản hoạt động như GUI để đơn giản hóa các bước trên, tức là Chỉnh sửa /etc/locale.gen-> sudo locale-gen->sudo update-locale LANG=en_LOVE.UTF-8

Đối với python, miễn là /etc/locale.gencó chứa ứng cử viên địa phương đó và locale.genđược biên dịch, setlocale(category, locale)nên hoạt động mà không cần ném locale.Error: unsupoorted locale setting. Bạn có thể kiểm tra đúng chuỗi en_US.UTF-8/ en_US/....etcsẽ được đặt setlocale(), bằng cách quan sát /etc/locale.gentệp, sau đó bỏ ghi chú và biên dịch nó theo ý muốn. zh_CN GB2312không có dấu chấm trong tệp đó có nghĩa là chuỗi đúng zh_CNzh_CN.GB2312.


Đối với tình huống của tôi, câu trả lời ngắn gọn là: 1. chỉnh sửa /etc/locale.gen, bỏ ghi chú zh_CN.UTF-8dòng; 2 sudo locale-gen..
SnowOnion


2

Tôi đã có cùng một vấn đề, và đã không làm việc cho tôi ."export LC_ALL=c"

Hãy thử export LC_ALL="en_US.UTF-8"(nó sẽ hoạt động).


1

Thông báo lỗi cho biết sự cố với cài đặt ngôn ngữ. Để khắc phục điều này như được chỉ ra bởi các câu trả lời khác, bạn cần sửa đổi ngôn ngữ của mình.

Trên Mac OS X Sierra, tôi thấy rằng cách tốt nhất để làm điều này là sửa đổi ~/bash_profiletệp như sau:

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

Thay đổi này sẽ không được chứng minh ngay lập tức trong phiên cli hiện tại của bạn trừ khi bạn tải lại hồ sơ bash bằng cách sử dụng : source ~/.bash_profile.

Câu trả lời này khá gần với câu trả lời mà tôi đã đăng cho các câu hỏi không trùng lặp, không trùng lặp khác (nghĩa là không liên quan đến pipenv) nhưng điều này xảy ra để yêu cầu cùng một giải pháp.

Đối với người điều hành: Với sự tôn trọng; Câu trả lời trước của tôi đã bị xóa vì lý do này nhưng tôi cảm thấy hơi ngớ ngẩn vì thực sự câu trả lời này áp dụng hầu như bất cứ khi nào lỗi là "vấn đề với miền địa phương" ... nhưng có một số tình huống, ngôn ngữ và môi trường khác nhau có thể kích hoạt lỗi đó

Do đó, A) không có ý nghĩa để đánh dấu các câu hỏi là trùng lặp và B) không có ý nghĩa để điều chỉnh câu trả lời vì cách khắc phục rất đơn giản, giống nhau trong từng trường hợp và không được hưởng lợi từ trang trí.


1

Ubuntu:

$ sudo vi /etc/default/locale

Thêm cài đặt bên dưới vào cuối tập tin.

LC_ALL = en_US.UTF-8

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.