Error fatal de Python: Py_Initialize: no se puede obtener la codificación de configuración regional ... SyntaxError: sintaxis no válida Abortado (núcleo volcado)

16

Instalé anaconda ejecutando el

bash Anaconda-2.2.0-Linux-x86_64.sh

comando en mi sistema Ubuntu 14.04, que se instaló correctamente, después de lo cual se me solicitó exportar mi nueva /home/username/anaconda/binvariable de entorno $ PATH.

Al hacerlo, pude usar todas las funciones de anaconda, incluidos los IDE, así como usar todos los comandos basados ​​en conda con éxito.

La próxima vez que encendí mi sistema, cada comando mal escrito vio un

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)

error. (Todos los comandos excepto pythonpara ser específicos)

Al seguir algunas publicaciones de stackexchange y askubuntu y también notar que mi $PYTHONPATHhabía sido configurado en usr/local/lib/python2.7, intenté

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

Pero no sirvió de nada.

Esto me hizo pasar por una saga completa de eliminaciones y reinstalaciones de paquetes y, por supuesto, muchas actualizaciones y mejoras, para intentar solucionar el problema por mí mismo.

conda info -a devoluciones:

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

El comando

which python

devoluciones

/home/username/anaconda/bin/python

y

echo "$PATH"

devoluciones

/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

Sé que tiene algo que ver con la forma en que configuro las variables de ruta, específicamente en la forma ~/.bashrcen que Anaconda antepuso automáticamente mi carpeta / home / username / anaconda / bin a la $PATHvariable (Esto sucedió durante una segunda instalación de Anaconda después de que la quité primero )

No he modificado cualquier otra variable de entorno, ya sea en ~/.profileo ~/.bashrc.


Agregué la línea de exportación $ PYTHONPATH a mi ~/.bashrcantes de reiniciar.

Todas las funciones de Anaconda funcionan ahora, aunque el mismo Fatal Python error: Py_Initialize: Unable to get the locale encodingerror sigue apareciendo en lugar del error de comando desconocido habitual, para la mayoría de los comandos mal escritos.

Seguiré investigando esto y editaré mi respuesta (o me referiré a las respuestas existentes, si las hay) tan pronto como descubra por qué sucede esto.

samirzach
fuente

Respuestas:

11

Yo recomendaría desarmar PYTHONPATH. Generalmente no es necesario, y hace que las cosas se rompan así al hacer que una Python cargue cosas de otra Python (en este caso, parece que Python 3 del sistema está tratando de cargar algo que fue escrito para Python 2).

asmeurer
fuente
3
Sinceras disculpas por la respuesta tardía, señor. Al desarmar el PYTHONPATH, ¿te refieres a configurarlo manualmente en el inicio cada vez? Anaconda ejecuta Python 2.7.10 actualmente y no he instalado Python 3, entonces, ¿por qué aparecería este error? La razón por la que pregunto es que la información de Conda para los directorios del sitio del usuario especifica la variable PYTHONPATH como PYTHONPATH: /home/usrnme/anaconda/lib/python2.7:/usr/local/lib/python2.7. Si voy a eliminar la línea PYTHONPATH: / home / usrnme / anaconda .. de mi ~ / .bashrc, el error aún persistiría y ninguna de las características de Anaconda funcionaría, hasta que la vuelva a configurar.
samirzach
3

He tenido problemas similares en los últimos días, así que lo rastreé hasta cómo bash maneja el "comando no encontrado". En Ubuntu 14.04 (y Linux Mint 17, que utilizo los scripts 14.04), /etc/bash.bashrc tiene la siguiente función:

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

Sin embargo, / usr / lib / command-not-found ha sido reescrito para Python 3. Maneja el comando /etc/bash.bashrc con:

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)

Esto llama "python3" desde la ruta en lugar de proporcionar la ruta directa. Para corregir esto, la línea 22 de / usr / lib / command-not-found debe cambiarse de

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

a

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

Esto parece ser un error con Ubuntu en lugar de Anaconda. Comprobaré si aparece en distribuciones posteriores.

rymac
fuente
1

Después de haber instalado python3 en las ubicaciones estándar y darme cuenta de que necesitaba sudo para usarlo, lo instalé localmente usando esto en mi directorio de inicio:

python3 -m venv env_py3
source env_py3/bin/activate

Pero tuvo más errores. Simplemente desarmar PYTHONPATH en la instancia de Amazon Linux de AWS funcionó muy bien para mí.

Aparejador
fuente
0

Mi problema era un poco diferente: como un usuario, podía ejecutar python, pero como otro usuario, no (recibí el mismo error que OP). Finalmente, descubrí que los permisos y la propiedad de /usr/lib/python3.5 estaban atornillados. La razón de esto fue que había establecido recursivamente los permisos y la propiedad en virtualenv, lo que terminó modificando los objetivos del enlace simbólico (targetin /usr/lib/python3.5 ) también.

Consejo: Utilícelo strace pythonpara descubrir qué sucede durante el inicio de Python. Cuando lo usé strace, pude ver claramente PERMISSION_DENIED en /usr/lib/python3.5 .

Juuso Ohtonen
fuente
0

Esto funciono para mi

/programming//a/39097003/823282

rm -rf venv
virtualenv -p /usr/bin/python3 venv/
source venv/bin/activate
pip install -r requirements.txt
decadencia activa
fuente
-3

Tuve un problema similar en Windows: eliminé la variable de sistema PYTHONHOME. Intentaré traducir la solución al inglés. Mi PC> Propiedades> Configuración avanzada del sistema> Variables de entorno, busque la variable PYTHONHOME y elimínela.

user790300
fuente