virtualenv python сломался после обновления ubuntu 15.10 до 16.04

У меня был python 3.4 в моем virtualenv, но после обновления ubuntu до 16.04 python обновлен до 3.5, поэтому python в virtualenv падает с этими ошибками:

Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'

Current thread 0x00007f2f2dbcb700 (most recent call first):
fish: “python” terminated by signal SIGABRT (Abort)

Как я могу это исправить?

5 ответов


я исправил это, установив минимальный рабочий python3.4 так что мой virtualenv работал достаточно хорошо, чтобы получить список пакетов, а затем сделал новый с python3.5... следующим образом:

получить python3.4 минимальных пакета:

wget http://launchpadlibrarian.net/221250032/python3.4-minimal_3.4.3-1ubuntu1~14.04.3_amd64.deb
wget http://launchpadlibrarian.net/221250033/libpython3.4-minimal_3.4.3-1ubuntu1~14.04.3_amd64.deb
sudo dpkg -i --force-breaks libpython3.4-minimal_3.4.3-1ubuntu1~14.04.3_amd64.deb
sudo dpkg -i python3.4-minimal_3.4.3-1ubuntu1~14.04.3_amd64.deb

мой virtualenv здесь: ~ / virtualenv / пример

получите список пакетов в вашем virtualenv (который теперь должен работать достаточно хорошо для этого, но может не делать другие вещи должным образом):

source ~/virtualenv/example/bin/activate
pip freeze > /tmp/requirements.txt
deactivate 

избавиться от python3.4, чтобы вернуться к предпочтительному состоянию Ubuntu 16.04:

sudo dpkg --purge python3.4-minimal
sudo dpkg --force-depends --purge libpython3.4-minimal

сделайте новый virtualenv с правильными пакетами:

virtualenv -p python3.5 example
source ~/virtualenv/example/bin/activate
pip install -r /tmp/requirements.txt

теперь это должно работать со всеми вашими старыми пакетами, но в python3.5. Должен...

см. также обновление python в virtualenv


У меня такая же проблема, и я решил воссоздать весь virtualenv

PS: извините за мой плохой английский.


У меня была та же проблема сегодня, и именно так я ее решил:

: Во-первых, как я понимаю, проблема возникает потому, что после обновления до Ubuntu 16.04 предыдущая версия Python также обновляется. В результате символические ссылки внутри любой среды Python3 больше не работают.

Решение 1: как было написано выше, простое решение-удалить все среды Python3 и создать их снова. Я не нравится, потому что это второй раз, когда я делаю это после обновления Ubuntu. Также, вероятно, мне нужно использовать несколько версий Python 3 в будущих проектах.

решение 2: это то, что я пробовал сегодня, и это работает нормально. Вместо использования virtualenv + virtualenvwrapper я решил попробовать комбинацию pyenv + pyenv-virtualenv.

основное различие между двумя подходами заключается в:

Pyenv фактически копирует весь Python каждый установка время создания новой версии pyenv. В отличие от, virtualenv использует символические ссылки для уменьшения размера виртуальное окружение-это.

Howto:

  1. установить pyenv, как описано здесь вместе с необходимыми версиями Python 2 и 3.
  2. посмотреть здесь о том, как вы можете работать с virtualenv с помощью pyenv.
  3. создайте новую среду, установите все зависимости с помощью pip и, надеюсь, забудьте о проблеме сломанных символических ссылок во время следующего обновления Ubuntu.

Я испытал ту же проблему, и мне удалось "исправить", воссоздав virtualenv и переустановив необходимые пакеты с помощью pip.

создайте новый virtualenv:

virtualenv <new-virtualenv>

активировать его:

source <new-virtualenv>/bin/activate

установить пакеты:

pip install <required-packages>

и я был рад снова пойти!

вы можете сохранить старый virtualenv, просто переименовав папку:

mv <old-virtualenv> <old-virtualenv>-backup

я исправил это, создав новый virtualenv и скопировав исполняемый файл python в старый сломанный virtualenv.