ImportError: Нет модуля с именем bz2 для Python 2.7.2 - PullRequest
36 голосов
/ 14 ноября 2011

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

ImportError: No module named bz2

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

РЕДАКТИРОВАТЬ: Я думаю, что ранее я установил Python 2.7.2 путем компиляции из исходного кода.Вероятно, в тот момент у меня не было libbz2-dev, поэтому модуль bz2 не установлен.Теперь я надеюсь установить Python2.7 через

sudo apt-get install python2.7

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

Ответы [ 10 ]

45 голосов
/ 02 января 2013

Я сталкиваюсь с той же проблемой, вот мое решение.

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

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

sudo apt-get install libbz2-dev

Fedora:

sudo yum install bzip2-devel

, а затем восстановить Python

исходит от другого ответа

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

25 голосов
/ 14 ноября 2011

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

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

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

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

/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

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

23 голосов
/ 08 января 2014

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

sudo cp /usr/lib64/python2.6/lib-dynload/bz2.so /usr/local/lib/python2.7/
6 голосов
/ 05 октября 2013

Может, кому-то это поможет:

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
4 голосов
/ 26 февраля 2014

Для Ubuntu / Debian:

sudo apt-get install libbz2-dev

Для Fedora:

sudo yum install bzip2-devel

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

3 голосов
/ 25 марта 2014

ответ 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/
2 голосов
/ 09 февраля 2014

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

У меня все работало нормально ...

1 голос
/ 06 июля 2018

Если ваш bz2 в /usr/lib64/python2.7/lib-dynload/ имеет имя: "bz2.x86_64-linux-gnu.so", не забудьте переименовать его в bz2.so при копировании на ваш путь или это может быть неправильно получено:

cp /usr/lib64/python2.6/lib-dynload/bz2.x86_64-linux-gnu.so /python_install_path/lib/python2.7/bz2.so
1 голос
/ 22 ноября 2016

Убедитесь, что 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 по другому пути.

0 голосов
/ 07 сентября 2018

У меня была такая же проблема с Python 2.17.15 и pyenv на Ubuntu. Системный питон из / usr / bin / python работал нормально. В моем случае это помогло установить libbz2-dev и затем переустановить python 2.7.15:

sudo apt-get install libbz2-dev
pyenv uninstall 2.7.15
pyenv install 2.7.15
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...