ข้อผิดพลาดร้ายแรงของ Python: Py_Initialize: ไม่สามารถรับการเข้ารหัสตามสถานที่ได้ ...


16

ฉันติดตั้งแอนาคอนดาด้วยการรัน

bash Anaconda-2.2.0-Linux-x86_64.sh

คำสั่งบนระบบ Ubuntu 14.04 ของฉันซึ่งติดตั้งสำเร็จแล้วหลังจากนั้นฉันถูกขอให้ส่งออก/home/username/anaconda/binตัวแปรสภาพแวดล้อม $ PATH ใหม่

ในการทำเช่นนั้นฉันสามารถใช้คุณสมบัติทั้งหมดของอนาคอนด้ารวมถึง IDE และใช้คำสั่ง conda ทั้งหมดได้สำเร็จ

ในครั้งต่อไปที่ฉันบูทระบบของฉันคำสั่งที่พิมพ์ผิดพลาดจะเห็น

Fatal Python error: Py_Initialize: Unable to get the locale encoding
  File "/usr/local/lib/python2.7/encodings/__init__.py", line 123
    raise CodecRegistryError,\
                            ^
SyntaxError: invalid syntax
Aborted (core dumped)

ความผิดพลาด (คำสั่งทั้งหมดยกเว้นpythonเฉพาะ)

ในการติดตาม stackexchange และ askubuntu โพสต์และยังสังเกตเห็นว่าฉัน$PYTHONPATHถูกตั้งค่าเป็นusr/local/lib/python2.7ฉันพยายาม

export PYTHONPATH=$PYTHONPATH:/home/username/anaconda/lib/python2.7

แต่มันก็ไม่ได้ช่วยอะไร

นี่ทำให้ฉันต้องผ่านการลบแพคเกจและติดตั้งใหม่ทั้งหมดและแน่นอนมีการอัปเดตและอัปเกรดจำนวนมากเพื่อลองและแก้ไขปัญหาด้วยตัวเอง

conda info -a ผลตอบแทน:

CIO_TEST: <not set>
CONDA_DEFAULT_ENV: <not set>
CONDA_ENVS_PATH: <not set>
LD_LIBRARY_PATH: <not set>
PATH: /home/username/anaconda/bin:/home/username/Scala-sbt/sbt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/username/bin:/usr/local/java/jdk1.8.0_20/bin
PYTHONHOME: <not set>
PYTHONPATH: /usr/local/lib/python2.7:/home/username/anaconda/bin/python

คำสั่ง

which python

ผลตอบแทน

/home/username/anaconda/bin/python

และ

echo "$PATH"

ผลตอบแทน

/home/username/anaconda/bin:/home/username/Scala-sbt/sbt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/username/bin:/usr/local/java/jdk1.8.0_20/bin

ฉันรู้ว่ามันเป็นเรื่องเกี่ยวกับวิธีที่ฉันตั้งค่าตัวแปรพา ธ โดยเฉพาะในที่~/.bashrcที่ Anaconda ได้เตรียมโฟลเดอร์ / home / ชื่อผู้ใช้ / anaconda / bin ของฉันไว้ที่ตัวแปรโดยอัตโนมัติ$PATH(สิ่งนี้เกิดขึ้นระหว่างการติดตั้ง Anaconda ครั้งที่สอง )

ฉันยังไม่ได้มีการปรับเปลี่ยนตัวแปรสภาพแวดล้อมอื่น ๆ ทั้งในหรือ~/.profile~/.bashrc


ฉันเพิ่มบรรทัดการส่งออก $ PYTHONPATH ของฉัน~/.bashrcก่อนที่จะเริ่มต้นใหม่

ฟีเจอร์ทั้งหมดของ Anaconda ใช้งานได้แล้วในขณะนี้แม้ว่าFatal Python error: Py_Initialize: Unable to get the locale encodingข้อผิดพลาดเดียวกันจะยังคงปรากฏขึ้นแทนที่จะเป็นข้อผิดพลาดคำสั่งที่ไม่รู้จักตามปกติสำหรับคำสั่งที่พิมพ์ผิดส่วนใหญ่

ฉันจะดูต่อไปและแก้ไขคำตอบของฉัน (หรืออ้างถึงคำตอบที่มีอยู่หากมี) ทันทีที่ฉันพบว่าทำไมสิ่งนี้ถึงเกิดขึ้น

คำตอบ:


11

ฉันจะแนะนำการล้าง PYTHONPATH โดยทั่วไปไม่จำเป็นและทำให้สิ่งต่าง ๆ แตกเช่นนี้โดยทำให้ Python โหลดสิ่งหนึ่งจาก Python อีกอันหนึ่ง (ในกรณีนี้ดูเหมือนว่า Python 3 ของระบบกำลังพยายามโหลดบางสิ่งที่เขียนขึ้นสำหรับ Python 2)


3
ขอแสดงความขอโทษอย่างจริงใจสำหรับคำตอบที่ล่าช้า ด้วยการยกเลิกการตั้งค่า PYTHONPATH คุณหมายถึงการตั้งค่าด้วยตนเองเมื่อเริ่มต้นทุกครั้งหรือไม่ อนาคอนดารัน Python 2.7.10 แล้วและฉันยังไม่ได้ติดตั้ง Python 3 ดังนั้นทำไมข้อผิดพลาดนี้ถึงแสดงขึ้นมา เหตุผลที่ว่าทำไมฉันขอให้เป็นข้อมูล Conda สำหรับ dirs เว็บไซต์ที่ใช้ระบุตัวแปร PYTHONPATH PYTHONPATH: /home/usrnme/anaconda/lib/python2.7:/usr/local/lib/python2.7เป็น ถ้าฉันจะลบ PYTHONPATH: / home / usrnme / anaconda .. บรรทัดจาก ~ / .bashrc ของฉันข้อผิดพลาดจะยังคงมีอยู่และคุณสมบัติของ Anaconda จะไม่ทำงานจนกว่าฉันจะตั้งค่าอีกครั้ง
samirzach

3

ฉันมีปัญหาที่คล้ายกันในสองสามวันที่ผ่านมาดังนั้นฉันจึงย้อนกลับไปที่วิธีทุบตีจัดการ "ไม่พบคำสั่ง" ใน Ubuntu 14.04 (และ Linux Mint 17 ซึ่งฉันใช้สคริปต์ 14.04) /etc/bash.bashrc มีฟังก์ชั่นดังต่อไปนี้:

if [ -x /usr/lib/command-not-found ]; then
    function command_not_found_handle {
        # check because c-n-f could've been removed in the meantime
        if [ -x /usr/lib/command-not-found ]; then
            /usr/bin/python /usr/lib/command-not-found -- $1
            return $?
        else
           return 127
        fi
    }
fi

อย่างไรก็ตาม / usr / lib / command-not-found ถูกเขียนใหม่สำหรับ Python 3 ซึ่งจัดการกับคำสั่ง /etc/bash.bashrc ด้วย:

if sys.version < '3':                                                       
    # We might end up being executed with Python 2 due to an old            
    # /etc/bash.bashrc.                                                     
    import os                                                               
    if "COMMAND_NOT_FOUND_FORCE_PYTHON2" not in os.environ:                 
        os.execvp("python3", [sys.argv[0]] + sys.argv)

สิ่งนี้เรียกว่า "python3" จากเส้นทางแทนที่จะให้เส้นทางโดยตรง หากต้องการแก้ไขสิ่งนี้บรรทัด 22 ของ / usr / lib / command-not-found ควรเปลี่ยนจาก

os.execvp("python3", [sys.argv[0]] + sys.argv)

ถึง

os.execv("/usr/bin/python3", [sys.argv[0]] + sys.argv)

สิ่งนี้ดูเหมือนว่าจะเป็นบั๊กกับ Ubuntu แทนที่จะเป็นอนาคอนด้า ฉันจะตรวจสอบเพื่อดูว่ามันจะปรากฏในการกระจายในภายหลัง


1

หลังจากติดตั้ง python3 ในตำแหน่งมาตรฐานและตระหนักว่าฉันต้องการใช้ sudo ฉันจึงติดตั้งในเครื่องโดยใช้สิ่งนี้ในโฮมไดเร็กตอรี่ของฉัน:

python3 -m venv env_py3
source env_py3/bin/activate

แต่มีข้อผิดพลาดเพิ่มเติม เพียงแค่ยกเลิก PYTHONPATH บนอินสแตนซ์ Amazon Linux ของ AWS นั้นยอดเยี่ยมมากสำหรับฉัน


0

ปัญหาของฉันแตกต่างกันเล็กน้อย: ในฐานะผู้ใช้รายหนึ่งฉันสามารถเรียกใช้pythonแต่เป็นผู้ใช้อื่นไม่ใช่ (ฉันได้รับข้อผิดพลาดเดียวกับ OP) ในที่สุดฉันก็พบว่าสิทธิ์และความเป็นเจ้าของของ/usr/lib/python3.5ถูกทำให้เป็นเกลียว เหตุผลสำหรับเรื่องนี้คือฉันได้ตั้งค่าการอนุญาตและการเป็นเจ้าของบน virtualenv ซ้ำซึ่งสิ้นสุดลงในการปรับเปลี่ยนเป้าหมาย symlink (targetin /usr/lib/python3.5 ) เช่นกัน

เคล็ดลับ: ใช้strace pythonเพื่อหาว่าเกิดอะไรขึ้นระหว่างการเริ่มต้นของ Python เมื่อผมใช้straceผมได้เห็นอย่างชัดเจนPERMISSION_DENIEDบน/usr/lib/python3.5



-3

ฉันมีปัญหาที่คล้ายกันใน windows - ฉันลบตัวแปรระบบ PYTHONHOME ฉันจะพยายามแปลทางออกเป็นภาษาอังกฤษ คอมพิวเตอร์ของฉัน> คุณสมบัติ> การตั้งค่าระบบขั้นสูง> ตัวแปรสภาพแวดล้อมค้นหาตัวแปร PYTHONHOME และลบทิ้ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.