Подтвердить что ты не робот

ImportError: нет модуля с именем bz2 для Python 2.7.2

Я использую Python 2.7.2 на Ubuntu 11.10. Я получил эту ошибку при импорте модуля bz2:

ImportError: No module named bz2

Я думал, что модуль bz2 должен поставляться с Python 2.7. Как я могу исправить эту проблему?

EDIT: Я думаю, что я ранее устанавливал Python 2.7.2, компилируя из источника. Вероятно, в тот момент у меня не было libbz2-dev, поэтому модуль bz2 не установлен. Теперь я надеюсь установить Python2.7 через

sudo apt-get install python2.7

Но он скажет, что он уже установлен. Есть ли способ удалить предыдущую установку Python2.7 и переустановить?

4b9b3361

Ответ 1

Хорошо, это намного легче понять в форме ответа, поэтому я переведу то, что я напишу в своем комментарии к этому ответу.

К счастью для вас, вы не перезаписали системную версию python, так как Ubuntu 11.10 поставляется с предустановленной версией 2.7.2.

Ваши двоичные файлы python (python и python2.7) расположены в /usr/local/bin, который является каталогом, в котором обычно устанавливаются файлы, специфичные для пользователя. Это хорошо, это означает, что ваш системный python все еще существует.

Сначала попробуйте запустить системный python. Введите это из командной строки:

/usr/bin/python -c "import bz2; print bz2.__doc__"

Это должно напечатать что-то вроде этого:

λ > /usr/bin/python -c "import bz2; print bz2.__doc__"

The python bz2 module provides a comprehensive interface for
the bz2 compression library. It implements a complete file
interface, one shot (de)compression functions, and types for
sequential (de)compression.

Если это так, значит, вы в порядке.

Итак, вам просто нужно исправить ваш PATH, который сообщает оболочке, где найти команды. /usr/local/bin будет иметь приоритет над /usr/local, поэтому есть некоторые способы исправить это, в порядке сложности/раздражения/изменения вашей системы:

Удалить символическую ссылку python из /usr/local/bin

Это сделает так, что при вводе python он должен вернуться к выполнению /usr/bin/python, который является псевдонимом для системного python 2.7.2.

sudo rm /usr/local/bin/python

Переместите /usr/bin, чтобы иметь более высокий приоритет в PATH

Нежелательно, если у вас уже есть материал в /usr/local/bin, который должен иметь приоритет над /usr/bin, но я добавляю это для полноты.

В вашем профиле оболочки (не уверен, что Ubuntu по умолчанию, но я использую ~/.bash_profile, вы можете сделать это:

export PATH=/usr/bin:$PATH

Удалите установку python

Это экстремально, и первый вариант, который я представил, должен быть вашим первым вариантом.

Вам действительно нужна ваша собственная версия Python? Если вам нужны изолированные среды python, вы, вероятно, действительно хотите virtualenv. Вы, вероятно, можете удалить свои, если нет причин для этого.

Это будет немного раздражать, но в основном:

  • Удалите команды python и python2.7 и pythonw и pythonw2.7 из /usr/local/bin.
  • Удалить /usr/local/lib/python/2.7.2

Эта часть не завершена, потому что я забываю, что еще есть.

Ответ 2

Я встречаю ту же проблему, здесь мое решение.

Причиной ошибки импорта является то, что вы строите python, система не может найти заголовки bz2 и пропустить модуль bz2 здания.

Установите их на Ubuntu/Debian:

sudo apt-get install libbz2-dev

Fedora:

sudo yum install bzip2-devel

а затем перестройте python

приходит из другого ответа

Ответ @birryree помогает вернуться к исходному питону системы.

Ответ 3

В случае, вы должны использовать python2.7, вы должны запустить: (Centos 6.4)

sudo cp /usr/lib64/python2.6/lib-dynload/bz2.so /usr/local/lib/python2.7/

Ответ 4

Возможно, это кому-то поможет:

apt-get install libbz2-dev # for bz2
apt-get install libssl-dev # for _ssl
apt-get install libsqlite3-dev # for sqlite
apt-get install libreadline6-dev # for readline,  _curses,  _curses_panel

Ответ 5

Для Ubuntu/Debian:

sudo apt-get install libbz2-dev

Для Fedora:

sudo yum install bzip2-devel

А затем перекомпилируйте python и установите его.

Ответ 6

Я использовал символическую ссылку между /usr/lib64/python2.6/lib-dynload/bz2.so /usr/local/lib/python2.7/lib-dynload/

Работал отлично для меня...

Ответ 7

matocnhoi отвечает для меня в centOS

sudo cp /usr/lib64/python2.6/lib-dynload/bz2.so /usr/local/lib/python2.7/

и я использовал virtualenv, поэтому команда

sudo cp /usr/lib64/python2.6/lib-dynload/bz2.so ../../../env/lib/python2.7/

Ответ 8

Убедитесь, что вы установили bz2, запустите sudo yum install bzip2-devel.

  • Centos 6

    sudo cp /usr/lib64/python2.6/lib-dynload/bz2.so /python_install_path/lib/python2.7
    
  • Centos 7

    sudo cp /usr/lib64/python2.7/lib-dynload/bz2.so /python_install_path/lib/python2.7
    

python_install_path обычно /usr/local/lib/python2.7/, вам нужно заменить его, если вы устанавливаете python по другому пути.