Я пользователь 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
В чем проблема и как ее решить?
python
linux
installation
debian
Бельфегор
источник
источник
Ответы:
Убедитесь, что у вас есть рабочий пакет python-apt. Вы можете попробовать удалить и установить этот пакет еще раз, чтобы решить проблему с отсутствием местонахождения apt_pkg.so.
источник
apt-get remove --purge python-apt
и установите сноваpython-apt
звучит довольно опасно !! Один раз усвоил урок и не буду его пробовать.Я столкнулся с этой проблемой при выполнении
sudo apt-get update
. Мой env - debian8 с python2.7 + 3.4 (по умолчанию) + 3.5.Следующий код воссоздает только
apt_pkg....so
файл для python 3.5.Следующий код решил мою проблему,
cd /usr/lib/python3/dist-packages sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so
Итак, очевидно, что python3-apt проверяет самую высокую версию python вместо текущей используемой версии python.
источник
sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so
следует изменить наsudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so apt_pkg.so
sudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.so
для python3.6, и теперь эта ужасная ошибка исчезла.sudo apt install python3.7
я получил эту ошибку apt_pkg пытается запустить пип, так что мне нужно бежать ,cd /usr/lib/python3/dist-packages
тоsudo ln -s apt_pkg.cpython-{36m,37m}-x86_64-linux-gnu.so
потомsudo apt install python3-pip
.sudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.so
Решите это следующим образом:
/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
чтобы попытаться получить правильное имя.источник
/usr/lib/python3/dist-packages
и увидел, что у меня нетapt_pkg.cpython-34m-i386-linux-gnu.so
илиapt_pkg.cpython-3m-i386-linux-gnu.so
, но у меня естьapt_pkg.cpython-36m-i386-linux-gnu.so
... Я скопировал этот файлapt_pkg.so
и отлично работал! Благодарность!Это случилось со мной в Ubuntu 18.04.2 после того, как я попытался установить Python3.7 из репозитория deadsnakes.
Решение было это
1)
cd /usr/lib/python3/dist-packages/
2)
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
источник
RUN ln -s /usr/lib/python3/dist-packages/apt_pkg.cpython-36m-x86_64-linux-gnu.so /usr/lib/python3/dist-packages/apt_pkg.so
Эта ошибка часто возникает, когда более новая версия python была установлена вместе со старой версией, например;
Запустите команду, использующую модуль 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 с правильная версия python. Итак, если у нас установлен 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, мы даем команде возможность выбрать одну из трех версий python, из которых она выберет самую высокую версию.
источник
Решение @ user8178061 работало хорошо, но я сделал это с некоторыми изменениями для моей версии, которая связана
python3.7
с Ubuntu.Я заменил
apt_pkg.cpython-3m-i386-linux-gnu.so
сapt_pkg.cpython-36m-x86_64-linux-gnu.so
Вот две команды для выполнения:
cd /usr/lib/python3/dist-packages
sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
источник
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
чтобы было понятно, чтоapt_pkg.so
есть.sudo cp apt_pkg.cpython-37m-x86_64-linux-gnu.so apt_pkg.so
по какой-то причине пришлось поменять наЭто сработало для меня после обновления python3.7 на ubuntu18.04
cd /usr/lib/python3/dist-packages sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
источник
По какой-то причине моя установка отсутствовала
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.so
в/usr/lib/python3/dist-packages
Я не уверен, было ли мое обновление неработающим или почему это произошло. Это произошло после попытки обновления (точное-> редкое-> количественное обновление)
источник
python --version Python 3.7.5
cd
в/usr/lib/python3/dist-packages
и проверьтеapt_pkg.*
файлы. Вы обнаружите, что для вашей версии Python по умолчанию его нет:ll apt_pkg.* apt_pkg.cpython-36m-x86_64-linux-gnu.so
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.cpython-37m-x86_64- linux-gnu.so
источник
В крайнем
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.источник
если вы используете python 3.7, понизьте его до python 3.6, обновив альтернативы, это сработало для меня
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1 sudo update-alternatives --config python3
источник
Если вы используете python 3.5, понизьте до 3.4. Это самый безопасный ход.
Ниже
/usr/lib/python3/dist-packages
вы увидите,*34m*
какой python 3.5 нельзя использовать. жажа ответь символьной ссылкой на него.источник
Помимо создания символьной ссылки
apt_pkg.so
, вы можете создатьapt_inst.so
таким же образомapt_pkg.so
.ln -s apt_inst.cpython-35m-x86_64-linux-gnu.so apt_inst.so
источник
Я вижу, что все говорят, как исправить это странным копированием и т. Д., Но никто не сказал, почему возникает проблема.
Итак, позвольте мне объяснить для тех из вас, кто, как я, не хочет связываться с системными файлами только потому, что им так сказал кто-то из SO.
Проблема в том, что:
~$ grep -R "\#\!/usr/bin/python3" /usr/lib/* /usr/lib/cnf-update-db:#!/usr/bin/python3 /usr/lib/command-not-found:#!/usr/bin/python3 /usr/lib/cups/filter/pstotiff:#!/usr/bin/python3 /usr/lib/cups/filter/rastertosag-gdi:#!/usr/bin/python3 -u grep: /usr/lib/cups/backend/cups-brf: Permission denied /usr/lib/cups/backend/hpfax:#!/usr/bin/python3 /usr/lib/language-selector/ls-dbus-backend:#!/usr/bin/python3 /usr/lib/python3/dist-packages/language_support_pkgs.py:#!/usr/bin/python3 /usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py:#!/usr/bin/python3 /usr/lib/python3/dist-packages/cupshelpers/installdriver.py:#!/usr/bin/python3 /usr/lib/python3/dist-packages/cupshelpers/openprinting.py:#!/usr/bin/python3 /usr/lib/python3/dist-packages/cupshelpers/xmldriverprefs.py:#!/usr/bin/python3 /usr/lib/python3/dist-packages/cupshelpers/smburi.py:#!/usr/bin/python3 /usr/lib/python3/dist-packages/cupshelpers/ppds.py:#!/usr/bin/python3 /usr/lib/python3/dist-packages/cupshelpers/debug.py:#!/usr/bin/python3 /usr/lib/python3/dist-packages/DistUpgrade/dist-upgrade.py:#!/usr/bin/python3 /usr/lib/python3/dist-packages/CommandNotFound/db/creator.py:#!/usr/bin/python3 /usr/lib/python3/dist-packages/CommandNotFound/db/db.py:#!/usr/bin/python3 /usr/lib/python3/dist-packages/Quirks/quirkreader.py:#!/usr/bin/python3 grep: /usr/lib/ssl/private: Permission denied /usr/lib/system-service/system-service-d:#!/usr/bin/python3 /usr/lib/ubuntu-release-upgrader/check-new-release-gtk:#!/usr/bin/python3 /usr/lib/ubuntu-release-upgrader/do-partial-upgrade:#!/usr/bin/python3 /usr/lib/ubuntu-release-upgrader/check-new-release:#!/usr/bin/python3 /usr/lib/update-notifier/package-data-downloader:#!/usr/bin/python3 /usr/lib/update-notifier/backend_helper.py:#!/usr/bin/python3 /usr/lib/update-notifier/apt_check.py:#!/usr/bin/python3 /usr/lib/update-notifier/apt-check:#!/usr/bin/python3
python-apt
/python3-apt
является системным пакетом, поэтому он для системного python по умолчаниюТаким образом, скрипты всегда будут получать версию, с которой в настоящее время связана ссылка
python3
, но не смогут, потому что пакет apt отсутствует.Общее решение: НИКОГДА не меняйте
python3
ссылку по умолчанию . Когда-либо. Это также относится кpython
ссылке - если приложение было написано на Python2 с некоторыми старыми элементами синтаксиса, которые не работают в Python3, приложение не будет работать.[Мой терминал сломался, потому что я использую Terminator, который явно написан на Python2.7, несовместимом с Python3.]
Представленные здесь решения предлагают либо скопировать / связать файлы пакета apt, либо изменить
python3
ссылку.Давайте проанализируем оба:
Это не должно быть проблемой, потому что все скрипты Python3.4 работают и с более новыми версиями.
Уже. Но он может сломаться в будущем - если вы будете поддерживать свою систему достаточно долго.
python3
ссылки назадЭто отличное решение, потому что мы можем вернуться к тому, чтобы «никогда не менять ссылку».
"Но мне нравится просто печатать
python
!" - Мне тоже это нравится! Вот как я вообще дошел до этой проблемы!В общем, вам следует избегать ручного изменения системных ссылок - используйте
update-alternatives
вместо этого для связывания разных версий . Это применимо к любому приложению с множеством версий. Это по-прежнему нарушает эти системные сценарии (потому что это действительно меняет ссылку), но вы можете легко переключаться туда и обратно, не беспокоясь о том, поместили ли вы ссылку и адрес в правильном порядке или допустили опечатку.Рассмотрите возможность использования другого имени, чем
python
/python3
для вашей ссылки или псевдонима.Или добавьте свою
python
/python3
ссылку в PATH (как это делают виртуальные среды), не изменяя системные ссылки.источник
Windows 10 WSL v1 (Ubuntu 16.04.6 LTS)
Этот ответ Reddit (слегка измененный сработал для меня)
sudo ln -sfn /usr/lib/python3/dist-packages/apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so
источник
Ознакомьтесь со следующей документацией. Это обязательно решит проблему. http://www.programmersought.com/article/55001874709/
источник
Ни один из ответов не помог мне (я использую Ubuntu 16.04 и Python 3.6). Итак, я наконец решил проблему следующим образом:
1- подключиться к FTP сервера
2- заходим в папку «/ usr / lib / python3 / dist-packages /»
3- продублируйте файл «apt_pkg.cpython-3 5 m-x86_64-linux-gnu.so»
4- переименуйте этот дублированный файл в «apt_pkg.cpython-3 6 m-x86_64-linux-gnu.so»
Это оно!
источник
Я использую Ubuntu 16.04 и обновился до Python 3.7. Вот ошибка, которая возникла при попытке добавить PPA
sudo add-apt-repository ppa:ubuntu-toolchain-r/test Traceback (most recent call last): File "/usr/bin/add-apt-repository", line 11, in <module> from softwareproperties.SoftwareProperties import SoftwareProperties, shortcut_handler File "/usr/lib/python3/dist-packages/softwareproperties/SoftwareProperties.py", line 27, in <module> import apt_pkg ModuleNotFoundError: No module named 'apt_pkg'
Мне удалось исправить эту ошибку, создав символическую ссылку с моим исходным python 3.4 apt_pkg.cpython-34m-x86_64-linux-gnu.so, создав следующую символическую ссылку
sudo ln -s apt_pkg.cpython-34m-x86_64-linux-gnu.so apt_pkg.so
источник
Пожалуйста, попробуйте исправить это, установив переменные локали:
export LC_ALL="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8"
источник
На всякий случай, если это поможет другому, я наконец решил эту проблему, которая, по-видимому, была вызвана конфликтами версий python, перенаправив ссылку python3, а затем перенаправив ее на нужную версию python:
sudo rm /usr/bin/python3 sudo ln -s /usr/bin/python3.4
Возможно, вам потребуется ввести правильную версию Python, найденную с помощью:
источник