Ich bin Debian-Benutzer und möchte Python-Dev installieren, aber wenn ich den Code in der Shell als Root ausführe:
# aptitude install python-dev
Ich erhalte folgende Fehlermeldung:
Traceback (most recent call last):
File "/usr/bin/apt-listchanges", line 28, in <module>
import apt_pkg
ImportError: No module named apt_pkg
Was scheint das Problem zu sein und wie kann ich es lösen?
python
linux
installation
debian
Belphegor
quelle
quelle
Antworten:
Stellen Sie sicher, dass Sie ein funktionierendes Python-Apt-Paket haben. Sie können versuchen, das Paket zu entfernen und erneut zu installieren, um das Problem zu beheben, bei dem apt_pkg.so nicht gefunden wird.
quelle
apt-get remove --purge python-apt
und installieren Sie es erneutpython-apt
klingt ziemlich gefährlich !! Ich habe meine Lektion einmal gelernt und werde es nicht versuchen.Ich bin dabei auf dieses Problem gestoßen
sudo apt-get update
. Meine Umgebung ist debian8 mit python2.7 + 3.4 (Standard) + 3.5.Der folgende Code erstellt nur eine
apt_pkg....so
Datei für Python 3.5 neuDer folgende Code hat mein Problem gelöst:
cd /usr/lib/python3/dist-packages sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so
Daher überprüft python3-apt offensichtlich die höchste Python-Version anstelle der aktuell verwendeten Python-Version.
quelle
sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so
sollte geändert werden zusudo 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
für Python3.6, und dieser schreckliche Fehler ist jetzt weg.sudo apt install python3.7
ich Python 3.7 neben dem Standard 3.6 in Ubuntu 18.04 mit installiert hatte, bekam ich diesen apt_pkg-Fehler beim Versuch, pip auszuführen, also musste ichcd /usr/lib/python3/dist-packages
dannsudo ln -s apt_pkg.cpython-{36m,37m}-x86_64-linux-gnu.so
dann ausführensudo apt install python3-pip
.sudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.so
Löse es damit:
/usr/lib/python3/dist-packages# cp apt_pkg.cpython-34m-i386-linux-gnu.so apt_pkg.so
Oder:
/usr/lib/python3/dist-packages# cp apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so
Grundsätzlich, wenn Sie
No such file or directory
nurls
versuchen, den richtigen Namen zu finden.quelle
/usr/lib/python3/dist-packages
und festgestellt , dass ich keineapt_pkg.cpython-34m-i386-linux-gnu.so
oder hatteapt_pkg.cpython-3m-i386-linux-gnu.so
, aber ich hatteapt_pkg.cpython-36m-i386-linux-gnu.so
... Ich habe diese Datei kopiertapt_pkg.so
und perfekt funktioniert! Vielen Dank!Dies passierte mir unter Ubuntu 18.04.2, nachdem ich versucht hatte, Python3.7 aus dem Deadsnakes-Repo zu installieren.
Lösung war dies
1)
cd /usr/lib/python3/dist-packages/
2)
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
quelle
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
Dieser Fehler tritt häufig auf, wenn eine neuere Version von Python neben einer älteren Version installiert wurde, z.
Führen Sie einen Befehl aus, der das Modul apt_pkg verwendet, und erhalten Sie eine Fehlermeldung wie z.
from CommandNotFound.db.db import SqliteDatabase File "/usr/lib/python3/dist-packages/CommandNotFound/db/db.py", line 5, in <module> import apt_pkg
Wenn wir eine Nicht-Distribution-Python3-Version mit apt installieren, wird ein freigegebenes Modulverzeichnis so festgelegt, dass es dasjenige von Python3 ist, das es normalerweise ist
/usr/lib/python3
.Meistens ist dies in Ordnung, aber unter bestimmten Umständen basieren die verschiedenen Versionen von Python auf anderen Bibliotheken oder gemeinsam genutzten Objekten / Bibliotheken als die andere Python-Version. Wie andere Antworten gezeigt haben, müssen wir die .SO mit der verknüpfen korrekte Python-Version. Wenn wir also python3.6 auf einem 64-Bit-System installiert haben, wäre der apt_pkg .SO-Link
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
Das Problem liegt jedoch in der Tatsache, dass bei der Installation einer neueren Python-Version der Link aktualisiert wird, um auf die neueste Python-Version zu verweisen, was dazu führt, dass der Fehler des Moduls apt_pkg nicht gefunden wird. Indem Sie überprüfen, welche Version von Python mit Ihrer Distribution geliefert wird, können Sie den Link wie oben gezeigt erstellen. Oder wir verwenden eine Methode, um dem Befehl eine Auswahl von Python-Versionen zum Verknüpfen der .SO anzubieten, wie z.
sudo ln -s apt_pkg.cpython-{36m,35m,34m}-x86_64-linux-gnu.so apt_pkg.so
Da Python diesen Link zur neuesten installierten Python-Version erstellt, können Sie dem Befehl aus 3 Python-Versionen auswählen, von denen die höchste angegebene Version ausgewählt wird.
quelle
Die Lösung von @ user8178061 hat gut funktioniert, aber ich habe es mit einigen Modifikationen für meine Version gemacht, die
python3.7
mit Ubuntu istIch ersetzte die
apt_pkg.cpython-3m-i386-linux-gnu.so
mitapt_pkg.cpython-36m-x86_64-linux-gnu.so
Hier die beiden auszuführenden Befehle:
cd /usr/lib/python3/dist-packages
sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
quelle
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
damit klarapt_pkg.so
ist , was ist.sudo cp apt_pkg.cpython-37m-x86_64-linux-gnu.so apt_pkg.so
aus irgendeinem Grund ändernDies funktionierte für mich nach dem Update von python3.7 auf ubuntu18.04
cd /usr/lib/python3/dist-packages sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
quelle
Aus irgendeinem Grund fehlte meine Installation
apt_pkg.so
im Verzeichnis python3 dist-packages. (apt_pkg.cpython-33m-x86_64-linux-gnu.so
war da?!) aber und ich musste einen Symlinkapt_pkg.so -> apt_pkg.cpython-33m-x86_64-linux-gnu.so
in machen/usr/lib/python3/dist-packages
Ich bin mir nicht sicher, ob mein Upgrade defekt war oder warum dies der Fall war. Es trat auf, nachdem versucht wurde, ein Upgrade durchzuführen (präzises-> raring-> quantales Upgrade)
quelle
python --version Python 3.7.5
cd
in/usr/lib/python3/dist-packages
und überprüfen Sie dieapt_pkg.*
Dateien. Sie werden feststellen, dass es für Ihre Standard-Python-Version keine gibt: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
quelle
Ein letzter Ausweg ist,
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
wenn derln
Befehl zu viel für Sie ist oder auf magische Weise nicht funktioniert.cp
Dies kann auch der Fall sein,mv
wenn Sie nur eine Python-Version verwenden möchten.quelle
Wenn Sie Python 3.5 verwenden, führen Sie ein Downgrade auf 3.4 durch. Das ist der sicherste Schritt.
Unter sehen
/usr/lib/python3/dist-packages
Sie,*34m*
welche Python 3.5 nicht verwenden kann. Zhazha Antwort Symlink dazu.quelle
Zusätzlich zum Erstellen eines symbolischen Links für
apt_pkg.so
möchten Sie möglicherweise aufapt_inst.so
die gleiche Weise wie erstellenapt_pkg.so
.ln -s apt_inst.cpython-35m-x86_64-linux-gnu.so apt_inst.so
quelle
Wenn Sie Python 3.7 verwenden, führen Sie ein Downgrade auf Python 3.6 durch Aktualisieren von Alternativen durch. Dies hat bei mir funktioniert
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1 sudo update-alternatives --config python3
quelle
Ich sehe alle sagen, wie man es mit seltsamem Kopieren usw. behebt, aber niemand hat wirklich gesagt, warum das Problem auftritt.
Lassen Sie mich das erklären, denn diejenigen unter Ihnen, die mich mögen, möchten nicht nur mit Systemdateien herumspielen, weil ihnen jemand auf SO dies gesagt hat.
Das Problem ist, dass:
~$ 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
ist ein Systempaket, also für Standard-SystempythonDaher erhalten die Skripte immer die aktuell verknüpfte Version
python3
, schlagen jedoch fehl, da das apt-Paket nicht vorhanden ist.Allgemeine Lösung: Ändern Sie NIEMALS den Standardlink
python3
. Je.Dies gilt auch fürpython
Links. Wenn eine App in Python2 mit einigen alten Syntaxelementen geschrieben wurde, die in Python3 nicht funktionieren, funktioniert die App nicht.[Mein Terminal ist auf diese Weise kaputt gegangen, weil ich Terminator verwende, der anscheinend in Python2.7 geschrieben ist und nicht mit Python3 kompatibel ist.]
Die hier vorgestellten Lösungen empfehlen entweder das Kopieren / Verknüpfen der apt-Paketdateien oder das Ändern
python3
Link zu .Lassen Sie uns beide analysieren:
Dies sollte kein Problem sein, da ab Python3.4 alle Python-Skripte auch auf neueren Versionen funktionieren.
Bisher. Aber es kann in Zukunft kaputt gehen - wenn Sie Ihr System lange genug behalten.
python3
Link zurück ändernDies ist eine großartige Lösung, da wir wieder zu "niemals den Link ändern" zurückkehren können.
"Aber ich mag es einfach zu tippen
python
!" - Ich mag es auch! So bin ich überhaupt zu diesem Problem gekommen!Im Allgemeinen sollten Sie vermeiden, Systemverknüpfungen manuell zu ändern. Verwenden Sie
update-alternatives
stattdessen, um verschiedene Versionen zu verknüpfen . Dies gilt für jede App mit vielen Versionen. Dadurch werden diese Systemskripte weiterhin beschädigt (da dadurch der Link geändert wird). Sie können jedoch problemlos hin und her wechseln, ohne sich Gedanken darüber machen zu müssen, ob Sie Link und Ziel in die richtige Reihenfolge bringen oder einen Tippfehler machen.Verwenden Sie möglicherweise einen anderen Namen als
python
/python3
für Ihren Link oder Alias.Oder fügen Sie Ihren eigenen
python
/python3
Link zu PATH hinzu (genau wie in virtuellen Umgebungen), ohne die Systemverknüpfungen zu ändern.quelle
Windows 10 WSL v1 (Ubuntu 16.04.6 LTS)
Diese reddit Antwort (leicht modifiziert hat bei mir funktioniert)
sudo ln -sfn /usr/lib/python3/dist-packages/apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so
quelle
Bitte lesen Sie die folgende Dokumentation. Es wird definitiv das Problem lösen. http://www.programmersought.com/article/55001874709/
quelle
Keine der Antworten hat bei mir funktioniert (ich verwende Ubuntu 16.04 und Python 3.6). Also habe ich das Problem endlich wie folgt gelöst:
1- Stellen Sie eine Verbindung zum FTP des Servers her
2- Gehen Sie zum Ordner "/ usr / lib / python3 / dist-packages /".
3- Duplizieren Sie die Datei "apt_pkg.cpython-3 5 m-x86_64-linux-gnu.so"
4- Benennen Sie diese duplizierte Datei in "apt_pkg.cpython-3 6 m-x86_64-linux-gnu.so" um.
Das ist es!
quelle
Ich bin auf Ubuntu 16.04 und habe ein Upgrade auf Python 3.7 durchgeführt. Hier ist der Fehler, den ich hatte, als ich versuchte, eine PPA hinzuzufügen
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'
Ich konnte diesen Fehler beheben, indem ich eine symbolische Verknüpfung mit meinem anfänglichen Python 3.4 apt_pkg.cpython-34m-x86_64-linux-gnu.so herstellte, indem ich die folgende symbolische Verknüpfung erstellte
sudo ln -s apt_pkg.cpython-34m-x86_64-linux-gnu.so apt_pkg.so
quelle
Bitte versuchen Sie dies zu beheben, indem Sie die Gebietsschemavariablen festlegen:
export LC_ALL="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8"
quelle
Nur für den Fall, dass es einem anderen hilft, habe ich dieses Problem, das anscheinend durch Python-Versionskonflikte verursacht wurde, endlich gelöst, indem ich den Link python3 umgeleitet und dann auf die richtige Python-Version umgeleitet habe:
sudo rm /usr/bin/python3 sudo ln -s /usr/bin/python3.4
Möglicherweise müssen Sie die richtige Python-Version eingeben, die gefunden wird mit:
quelle