2016-04-22 2 views
17

У меня был питон 3,4 в моем virtualenv, но после обновления Ubuntu до 16.04 питона повышен до 3.5 так питона в virtualenv аварий с этими ошибками:virtualenv питон сломал после обновления Ubuntu 15.10 до 16.04

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) 

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

+0

Вы пытались переустановить Python 3.5? Модуль 'encodings' является частью базовой установки. – mprat

ответ

4

Я установил это путем установки минимального рабочего 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. Если ...

Смотрите также Upgrade python in a virtualenv

1

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

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

+0

Как перенести проект django на другой virtualenv и заставить его работать? –

0

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

Создать новую virtualenv:

virtualenv <new-virtualenv> 

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

source <new-virtualenv>/bin/activate 

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

pip install <required-packages> 

И я был хорошо идти снова!

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

mv <old-virtualenv> <old-virtualenv>-backup 
+0

Есть ли способ извлечь список пакетов pip из сломанного virtualenv? –

1

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

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

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

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

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

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

Howto:

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

Я установил его, создав новую virtualenv и копирование питона исполняемого файла в старую сломанную virtualenv.

Смежные вопросы