pip install - locale.Error: การตั้งค่า locale ที่ไม่รองรับ


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 virtualenvด้วย python 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

เซิร์ฟเวอร์ของฉันคือ centos ไม่ใช่ Ubuntu @idjaw ฉันได้ตรวจสอบแล้วและดูเหมือนว่าจะไม่มีอะไรผิดปกติกับ local มัน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

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
ดังนั้นมันเป็นเพียงเรื่องของการตั้งค่าตัวแปรสภาพแวดล้อมแล้ว? คุณรู้ไหมว่าทำไมฉันไม่เคยพบเจอมาก่อน? ไม่ควรตั้งค่านี้โดยอัตโนมัติ
ericn

@eric สวัสดีฉันเพิ่งอัปเดตโพสต์ของฉัน ปัญหานี้เกิดขึ้นกับ python2.7 บนคอมพิวเตอร์ของฉัน
ROY

น่าสนใจมาก @ ROY ฉันมีเซิร์ฟเวอร์เกือบ 2 ตัวที่ตั้งค่าไว้แล้วและพวกเขาก็ทำงานได้อย่างสมบูรณ์แบบ
ericn

ฉันพบสิ่งนี้โดยใช้ letsencrypt-auto และexport LC_ALL=Cช่วย
maniexx

10
หากคุณสงสัยว่าLC_ALL=Cวิธีการดูที่นี่
การ์เร็ตต์

41

เรียกใช้คำสั่งต่อไปนี้ (มันจะทำงาน):

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

(-1) dpkg-reconfigureคำสั่งมีไว้สำหรับใช้กับระบบที่ใช้ Debian คำถามนี้ถูกแท็กด้วยcentos, อนุพันธ์ RHEL ซึ่งไม่ได้ให้การสนับสนุนสำหรับ dpkg เว้นแต่คุณจะเปิดใช้งานที่epel-releaseเก็บ, และติดตั้งdpkg-devel& dpkg-devแพ็คเกจ ถึงอย่างนั้นนี่ก็ไม่ใช่ทางออกที่ดี

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

[คำตอบนี้เป็นเป้าหมายบนแพลตฟอร์มลินุกซ์เท่านั้น]

สิ่งแรกที่คุณควรรู้คือพา ธ ของไฟล์ตั้งค่าโลแคลส่วนใหญ่สามารถหาได้จาก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) locale.Error: unsupoorted locale settingคุณสามารถตรวจสอบสตริงที่ถูกต้องen_US.UTF-8/ en_US/....etcที่จะตั้งในsetlocale()โดยการสังเกต/etc/locale.genไฟล์แล้วยกเลิกการคอมเม้นต์และรวบรวมตามที่ต้องการ zh_CN GB2312โดยไม่ต้องจุดในแฟ้มที่หมายถึงสตริงที่ถูกต้องคือและzh_CNzh_CN.GB2312


สำหรับสถานการณ์ของฉันคำตอบสั้น ๆ คือ: 1. แก้ไข/etc/locale.genuncomment 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"

การเปลี่ยนแปลงนี้จะไม่เห็นได้ชัดทันทีในเซสชั่น 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.