it-swarm.com.ru

ошибка установки python-dev: ImportError: Нет модуля с именем apt_pkg

Я пользователь Debian и хочу установить python-dev, но когда я запускаю код в командной консоли от имени root:

# aptitude install python-dev

Я получаю следующую ошибку:

Traceback (most recent call last):       
  File "/usr/bin/apt-listchanges", line 28, in <module>
    import apt_pkg
ImportError: No module named apt_pkg

В чем проблема и как я могу ее решить?

36
Belphegor

Убедитесь, что у вас есть рабочий пакет python-apt. Вы можете попытаться удалить и установить этот пакет еще раз, чтобы исправить проблему с отсутствующим файлом apt_pkg.so.

apt-get install python-apt
37
Arnestig

Я столкнулся с этой проблемой при выполнении Sudo apt-get update. Мой env - это debian8, с python2.7 + 3.4 (по умолчанию) + 3.5.

Следующий код создаст файл apt_pkg....so только для python 3.5

Sudo apt-get install python3-apt --reinstall

Следующий код решил мою проблему,

cd /usr/lib/python3/dist-packages
Sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so

Таким образом, очевидно, что python3-apt проверяет самую верхнюю версию Python вместо текущей используемой версии Python.

56
zhazha

Решите это этим:

/usr/lib/python3/dist-packages# cp apt_pkg.cpython-34m-i386-linux-gnu.so apt_pkg.so

Или же:

/usr/lib/python3/dist-packages# cp apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so

По сути, если вы получаете No such file or directory просто ls, чтобы попытаться получить правильное имя.

47
user8178061

Недавно я сталкивался с той же проблемой, когда запускал скрипт Python 3.3.0 в Aptana Studio, используя Ubuntu Quantal. Помимо ошибки из скрипта, над которым я работаю, я получаю следующее:

Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 64, in 
    apport_excepthook from apport.fileutils import likely_packaged,
    get_recent_crashes
  File "/usr/lib/python3/dist-packages/apport/__init__.py", line 4, in <module>
    from apport.report import Report
  File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module>
    import apport.fileutils
  File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in 
    <module> from apport.packaging_impl import impl as packaging
  File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 20, in 
    <module> import apt
  File "/usr/lib/python3/dist-packages/apt/__init__.py", line 21, in <module>
    import apt_pkg
ImportError: No module named 'apt_pkg'

Я попытался удалить, очистить, очистить и переустановить python3-apt и немного подглядывать, и обнаружил, что ошибка касается только Python 3.3.0. Попытка импортировать apt_pkg в IDLE лает той же ошибкой. Интересно, что импорт этого с использованием IDLE с Python 3.2.3 работает нормально. Кроме того, обе версии Python 3.x.x используют один и тот же /usr/lib/python3/dist-packages, и в нем есть apt_pkg.cpython-32mu.so и apt_pkg.cpython-32dmu.so. Эти файлы просто не совместимы с Python 3.3.0?

И последнее: запуск сценария вне Aptana Studio приводит к ошибке моего сценария без сообщения ImportError: No module named 'apt_pkg'.

5
Roberto

По какой-то причине в моей установке отсутствовал apt_pkg.so в директории dist-packages python3. (apt_pkg.cpython-33m-x86_64-linux-gnu.so был там ?!) но мне пришлось сделать символическую ссылку apt_pkg.so -> apt_pkg.cpython-33m-x86_64-linux-gnu.soin /usr/lib/python3/dist-packages

Я не уверен, был ли сломан мой апгрейд или почему это так. Это произошло после попытки обновления (точный-> raring-> количественный апгрейд)

4
Jamie Pate

Эта ошибка часто возникает, когда установлена ​​более новая версия python вместе со старой версией, например;

  • Ubuntu 18.04.1 поставляется с версией Python 3.6.6 
  • Установленный ppa: deadsnakes/python3.7.1 или альтернативный
  • Запустите команду, которая использует модуль apt_pkg, и получите такую ​​ошибку, как;

        from CommandNotFound.db.db import SqliteDatabase
    File "/usr/lib/python3/dist-packages/CommandNotFound/db/db.py", line 5, in <module>
        import apt_pkg
    

Когда мы устанавливаем не дистрибутивную версию python3 с помощью apt, она устанавливает каталог общего модуля в каталог python3, чаще всего это/usr/lib/python3. 

В большинстве случаев это будет нормально, но при некоторых обстоятельствах разные версии python зависят от разных библиотек или общих объектов/библиотек, тогда как другая версия python делает так, как указывалось в других ответах, нам нужно связать .SO с правильным версия на питоне. Так что если у нас установлен python3.6 в 64-битной системе, тогда ссылка apt_pkg .SO будет 

Sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so

Но проблема заключается в том, что когда мы устанавливаем более новую версию Python, ссылка будет обновляться, чтобы указывать на новейшую версию Python, что приводит к ошибке, что модуль apt_pkg не найден .... Проверяя, какая версия Python поставляется с В вашем дистрибутиве вы можете создать ссылку, как показано выше . Или мы используем метод, чтобы предложить команде выбор версий Python для связи .SO, таких как;

Sudo ln -s apt_pkg.cpython-{36m,35m,34m}-x86_64-linux-gnu.so apt_pkg.so

Поскольку python создаст эту ссылку на новейшую установленную версию python, мы даем команде возможность выбрать одну из 3 версий python, из которых он выберет самую высокую из указанных версий.

3
Jamie Lindsey

Если вы используете Python 3.5, понизьте до 3.4. Это самый безопасный шаг.

Под /usr/lib/python3/dist-packages вы увидите *34m*, который python 3.5 не может использовать. жажа ответь символическая ссылка на него.

2
Pobe

Последним средством является Sudo cp /usr/lib/python3/dist-packages/apt_pkg.cpython-35m-x86_64-linux-gnu.so /usr/lib/python3/dist-packages/apt_pkg.cpython-36m-x86_64-linux-gnu.so, Если команда ln слишком сложна или каким-то волшебным образом не работает.

cp выше также может быть mv, если вы используете только одну версию Python.

1
Tong Niu

Помимо создания символической ссылки для apt_pkg.so, вы можете захотеть сделать apt_inst.so таким же образом, как apt_pkg.so.

ln -s apt_inst.cpython-35m-x86_64-linux-gnu.so apt_inst.so 
0
Jihwan Park

Пожалуйста, попробуйте исправить это, установив переменные локали:

export LC_ALL="en_US.UTF-8"

export LC_CTYPE="en_US.UTF-8"
0
rajendra sharma