치명적인 Python 오류 : Py_Initialize : 로캘 인코딩을 가져올 수 없습니다… SyntaxError : 잘못된 구문이 중단되었습니다 (코어 덤프)


16

나는 아나콘다를 설치하여

bash Anaconda-2.2.0-Linux-x86_64.sh

Ubuntu 14.04 시스템에서 명령을 성공적으로 설치 한 후 새 /home/username/anaconda/bin$ PATH 환경 변수 를 내보내라는 메시지가 표시 됩니다.

그렇게하면서, 나는 IDE를 포함한 모든 아나콘다의 기능을 사용하고 모든 콘다 기반 명령을 성공적으로 사용할 수있었습니다.

다음에 시스템을 부팅 할 때, 모든 미스 타입 명령은

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

~/.bashrcAnaconda가 / home / username / anaconda / bin 폴더를 $PATH변수 앞에 자동으로 추가하는 경우 경로 변수를 설정하는 방식과 관련이 있음을 알고 있습니다. ).

~/.profile또는 에서 다른 환경 변수를 수정하지 않았습니다 ~/.bashrc.


~/.bashrc다시 시작하기 전에 내보내기 $ PYTHONPATH 행을 추가했습니다 .

Fatal Python error: Py_Initialize: Unable to get the locale encoding대부분의 잘못 입력 된 명령에 대해 일반적인 알 수없는 명령 오류 대신 동일한 오류가 계속 표시 되지만 Anaconda의 모든 기능이 현재 작동 합니다.

이 문제가 발생하는 이유를 알게 되 자마자이 문제를 계속 검토하고 답변을 편집하거나 기존 답변을 참조하십시오.

답변:


11

PYTHONPATH를 설정 해제하는 것이 좋습니다. 일반적으로 필요하지 않으며 다른 Python에서 하나의 Python을로드하여이를 중단시킵니다 (이 경우 시스템의 Python 3이 Python 2 용으로 작성된 것을로드하려고하는 것처럼 보입니다).


3
답장을 보내 주셔서 진심으로 사과드립니다. PYTHONPATH를 설정 해제하면 시작 시마다 수동으로 설정한다는 의미입니까? Anaconda는 현재 Python 2.7.10을 실행 중이며 Python 3을 설치하지 않았는데 왜이 오류가 표시됩니까? 내가 묻는 이유는 사용자 사이트 dirs에 대한 Conda의 정보가 PYTHONPATH 변수를로 지정했기 때문 PYTHONPATH: /home/usrnme/anaconda/lib/python2.7:/usr/local/lib/python2.7입니다. ~ / .bashrc에서 PYTHONPATH : / home / usrnme / anaconda .. 행을 제거하면 오류가 계속 발생하며 다시 설정할 때까지 Anaconda의 기능이 작동하지 않습니다.
samirzach

3

지난 며칠 동안 비슷한 문제가 발생했기 때문에 bash가 "명령을 찾을 수 없음"을 처리하는 방식으로 다시 추적했습니다. Ubuntu 14.04 (및 14.04 스크립트를 사용하는 Linux Mint 17)에서 /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"을 호출합니다. 이 문제를 해결하려면 / usr / lib / command-not-found의 22 행을

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

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

이것은 Anaconda가 아닌 Ubuntu의 버그 인 것 같습니다. 나중에 배포판에 나타나는지 확인하겠습니다.


1

표준 위치에 python3을 설치하고 그것을 사용하기 위해 sudo가 필요하다는 것을 깨달은 후 내 홈 디렉토리에서 이것을 사용하여 로컬로 설치했습니다.

python3 -m venv env_py3
source env_py3/bin/activate

그러나 더 많은 오류가있었습니다. AWS의 Amazon Linux 인스턴스에서 PYTHONPATH를 설정 해제하면 나에게 큰 도움이되었습니다.


0

내 문제는 조금 달랐습니다. 한 사용자는 실행할 수 python있지만 다른 사용자는 (OP와 동일한 오류가 발생했습니다) 실행할 수 있습니다 . 마지막으로 /usr/lib/python3.5 의 권한과 소유권이 망가 졌다는 것을 알았습니다 . 그 이유는 virtualenv에 대한 사용 권한과 소유권을 재귀 적으로 설정했기 때문에 symlink 대상을 수정하게되었습니다 (targetin /usr/lib/python3.5 )도 되었습니다.

팁 : strace python파이썬 시작 중에 무슨 일이 일어나고 있는지 알아내는 데 사용하십시오 . 를 사용할 때 /usr/lib/python3.5에서 PERMISSION_DENIEDstrace명확하게 볼 수있었습니다 .



-3

Windows에서도 비슷한 문제가 발생했습니다. PYTHONHOME 시스템 변수를 삭제했습니다. 솔루션을 영어로 번역하려고합니다. 내 컴퓨터> 속성> 고급 시스템 설정> 환경 변수에서 PYTHONHOME 변수를 찾아 삭제하십시오.

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