Fatal Python error: Py_Initialize: Не вдається отримати кодування локалі ... SyntaxError: недійсний синтаксис Aborted (core dumped)


16

Я встановив анаконду, запустивши

bash Anaconda-2.2.0-Linux-x86_64.sh

команда в моїй системі Ubuntu 14.04, яка успішно встановилася, після чого мені запропонували експортувати свою нову /home/username/anaconda/binзмінну середовища $ PATH.

Роблячи це, я зміг використовувати всі функції анаконди, включаючи IDE, а також успішно використовувати всі команди на основі конди.

Наступного разу, коли я завантажував свою систему, кожна команда, введена помилкою, бачила a

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 автоматично додав до $PATHзмінної мою / home / username / anaconda / bin папку (Це сталося під час другої установки 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, ви маєте на увазі кожен раз його вручну встановлювати під час запуску? Anaconda працює на 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, а не з Anaconda. Я перевірю, чи з’являється вона в наступних дистрибутивах.


1

Після того, як встановив python3 у стандартних місцях і зрозумів, що мені потрібен sudo для його використання, я встановив локально, використовуючи це у своєму домашньому каталозі:

python3 -m venv env_py3
source env_py3/bin/activate

Але було більше помилок. Просто відключення PYTHONPATH на екземплярі Amazon Linux AWS працювало для мене просто чудово.


1

Моя проблема була дещо іншою: як один користувач, я міг би працювати python, але як інший користувач, ні (я отримав ту ж помилку, що і ОП). Нарешті я з’ясував, що дозволи / власності на /usr/lib/python3.5 були накручені. Причиною цього було те, що я рекурсивно встановлював дозволи та права власності на virtualenv, що в кінцевому підсумку змінило цілі символьних посилань (targetin /usr/lib/python3.5 ) також.

Порада. Використовуйте, strace pythonщоб з’ясувати, що відбувається під час запуску Python. Коли я використовував strace, я чітко бачив PERMISSION_DENIED на /usr/lib/python3.5 .



-3

У мене була схожа проблема з Windows - я видалив системну змінну PYTHONHOME. Я спробую перекласти рішення на англійську мову. Мій комп'ютер> Властивості> Додаткові параметри системи> Змінні середовища, знайдіть змінну PYTHONHOME і видаліть її.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.