Installationsfehler von Python-Dev: ImportError: Kein Modul mit dem Namen apt_pkg


95

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?


1
Es sieht so aus, als ob Ihre Wohnung kaputt ist. Was passiert, wenn Sie versuchen, apt-get python-dev zu installieren?
Pierre Geier

Wenn ich es mit apt-get install python-dev versuche, heißt es, dass es bereits installiert ist: Lesen von Paketlisten ... Fertig Erstellen des Abhängigkeitsbaums Lesen von Statusinformationen ... Fertig Python-dev ist bereits die neueste Version. 0 aktualisiert, 0 neu installiert, 0 entfernt und 0 nicht aktualisiert. Irgendwelche anderen Vorschläge?
Belphegor

Antworten:


62

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.

apt-get install python-apt

Es ist bereits installiert. Wenn ich auf: # apt-get install python-apt drücke, werden Paketlisten gelesen ... Fertig Erstellen des Abhängigkeitsbaums Lesen von Statusinformationen ... Fertig Python-apt ist bereits die neueste Version. 0 aktualisiert, 0 neu installiert, 0 entfernt und 0 nicht aktualisiert. Und wenn ich es erneut versuche mit: # aptitude install python-dev Es gibt mir wieder den gleichen Fehler. Einige andere Ideen, was soll ich tun?
Belphegor

14
Entfernen Sie es mit apt-get remove --purge python-aptund installieren Sie es erneut
Arnestig

8
Beachten Sie andere Abhängigkeiten. Ich habe das Paket (zu) schnell in Ubuntu entfernt und viele andere Abhängigkeiten wurden ebenfalls entfernt (z. B. Ubuntu-Desktop). Es ist jedoch meine Schuld, dass ich die Notizen im Protokoll nicht beachtet habe.
Al R.

1
Ich bin mir nicht sicher, ob es an Python-Apt lag. Unter packages.ubuntu.com/lucid/ubuntu-desktop finden Sie Abhängigkeiten zu ubuntu-desktop.
Arnestig

2
@Arnestig ENTFERNEN python-aptklingt ziemlich gefährlich !! Ich habe meine Lektion einmal gelernt und werde es nicht versuchen.
Alvas

140

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....soDatei für Python 3.5 neu

sudo apt-get install python3-apt --reinstall

Der 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.


27
sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.sosollte geändert werden zu sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so apt_pkg.so
desaiankitb

38
Du bist unglaublich! Für mich war es sudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.sofür Python3.6, und dieser schreckliche Fehler ist jetzt weg.
Alex Gurrola

54
Nachdem sudo apt install python3.7ich 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 ich cd /usr/lib/python3/dist-packagesdann sudo ln -s apt_pkg.cpython-{36m,37m}-x86_64-linux-gnu.sodann ausführen sudo apt install python3-pip.
Abulka

3
Für Python 3.6 sudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.so
lautet der

1
Diese geschweiften Klammern sind keine Eigenschaft des Befehls ln. Sie rufen die Erweiterung der Shell-Klammer auf, siehe gnu.org/software/bash/manual/html_node/Brace-Expansion.html
Carlos A. Ibarra

112

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 directorynur lsversuchen, den richtigen Namen zu finden.


Funktioniert perfekt
Subhrajyoti Sen

3
Verwenden Sie unter Ubuntu 18.04 diese $ cd / usr / lib / python3 / dist-Pakete $ sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
Naren Yellavula

Dies funktionierte auch für mich ... Ich habe alle Dateien auf der Liste aufgelistet /usr/lib/python3/dist-packagesund festgestellt , dass ich keine apt_pkg.cpython-34m-i386-linux-gnu.sooder hatte apt_pkg.cpython-3m-i386-linux-gnu.so, aber ich hatte apt_pkg.cpython-36m-i386-linux-gnu.so... Ich habe diese Datei kopiert apt_pkg.sound perfekt funktioniert! Vielen Dank!
Leonardo Isso

Das hat auch bei mir funktioniert. Wie bei @LeonardoIsso habe ich auch alle Dateien aufgelistet, um den richtigen Dateinamen zu finden, da ich unter 32-Bit-Linux bin.
w3Develops

56

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


3
Ich wollte nur anderen bestätigen, dass dies tatsächlich für mich funktioniert hat.
AnthonyD973

2
das ist verrückt, danke! Wenn im 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
Hafen

2
Ja, das war die Lösung :)
Szedjani

1
Das ist die Lösung! Nach dem Upgrade auf Python 3.7.
JOHN

1
18.04.04, Upgrade auf Python 3.7 und das hat auch bei mir funktioniert! Vielen Dank!!
RJaus

18

Dieser Fehler tritt häufig auf, wenn eine neuere Version von Python neben einer älteren Version installiert wurde, z.

  • Ubuntu 18.04.1 wird mit Python Version 3.6.6 ausgeliefert
  • Installiertes ppa: deadsnakes / python3.7.1 oder alternativ
  • 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.


2
Mit 18.04.2 hat Ihre erste Empfehlung für mich funktioniert und ich konnte endlich das sudo apt-get-Update ohne Fehler ausführen. Ihre zweite Empfehlung gibt einen Fehler zurück, der besagt, dass apt-get.so kein Ordner war.
CloseISQ

15

Die Lösung von @ user8178061 hat gut funktioniert, aber ich habe es mit einigen Modifikationen für meine Version gemacht, die python3.7mit Ubuntu ist

Ich ersetzte die apt_pkg.cpython-3m-i386-linux-gnu.somitapt_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


1
Dies hat mein Problem behoben. Dies löst das Problem, wenn es durch das Umschalten der Python-Version von 3.6 auf 3.7 verursacht wurde.
JThistle

1
Danke, hatte das gleiche Problem! Erwägen Sie die Verwendung, sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.sodamit klar apt_pkg.soist , was ist.
Scipio

Hat funktioniert, aber ich musste es sudo cp apt_pkg.cpython-37m-x86_64-linux-gnu.so apt_pkg.soaus irgendeinem Grund ändern
Daniel

8

Dies 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

1
Dies funktionierte für mich nach dem Upgrade von Python 3.8 auf Ubuntu18.04.
Henry Palacios

6

Aus irgendeinem Grund fehlte meine Installation apt_pkg.soim Verzeichnis python3 dist-packages. ( apt_pkg.cpython-33m-x86_64-linux-gnu.sowar da?!) aber und ich musste einen Symlink apt_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)


Dies war die richtige Lösung für mich. Ich habe dieses Problem durch die Verwendung von pip3 als Root verursacht, obwohl ich wusste, dass es eine schlechte Idee war. Ich wollte sehen, wie sehr ich schockiert wäre, wenn ich meinen Finger in eine Lampenfassung stecken würde. Die Antwort lautet: ziemlich schlecht. Auch das Herumspielen mit dem Setup / etc / alternatives ist nichts für schwache Nerven. Nicht für jemanden, der Teilzeit besucht. Ich denke zu kreuzen, welcher Python-Link auf welches Python-Problem hinwies, das mich auf den Weg zur Katastrophe brachte.
Pauljohn32

6
  1. Überprüfen Sie Ihre Standardversion von Python 3:
python --version
Python 3.7.5
  1. cdin /usr/lib/python3/dist-packagesund überprüfen Sie die apt_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
  1. Erstellen Sie den Symlink:
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.cpython-37m-x86_64- linux-gnu.so 

5

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 der lnBefehl zu viel für Sie ist oder auf magische Weise nicht funktioniert.

cpDies kann auch der Fall sein, mvwenn Sie nur eine Python-Version verwenden möchten.


3

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-packagesSie, *34m*welche Python 3.5 nicht verwenden kann. Zhazha Antwort Symlink dazu.


Wie stufen Sie es herab?
Pynchia

Warum ist das Downgrade das sicherste Aktin?
David Medinets

3

Zusätzlich zum Erstellen eines symbolischen Links für apt_pkg.somöchten Sie möglicherweise auf apt_inst.sodie gleiche Weise wie erstellen apt_pkg.so.

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

3

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

Dies funktionierte für mich mit Python3.6, aber wenn ich zu Python3.7 zurückkehre, ist der Fehler immer noch da
Hugo Sohm

1

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:

  • In vielen Systemskripten ist Python3 Shebang fest codiert. Sie können es selbst überprüfen:
~$ 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 package python-apt/ python3-aptist ein Systempaket, also für Standard-Systempython

Daher 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ür pythonLinks. 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:

  1. Kopieren / Verknüpfen des apt-Pakets

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.

  1. python3Link zurück ändern

Dies 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!

  1. Im Allgemeinen sollten Sie vermeiden, Systemverknüpfungen manuell zu ändern. Verwenden Sie update-alternativesstattdessen, 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.

  2. Verwenden Sie möglicherweise einen anderen Namen als python/ python3für Ihren Link oder Alias.

  3. Oder fügen Sie Ihren eigenen python/ python3Link zu PATH hinzu (genau wie in virtuellen Umgebungen), ohne die Systemverknüpfungen zu ändern.


0

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



0

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!


0

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

1
Es sieht so aus, als ob diese Lösung bereits in mindestens 6 weiteren Antworten auf diese Frage vorgeschlagen wurde (und 3 weitere haben nur vorgeschlagen, die Datei zu kopieren, anstatt sie zu verknüpfen).
Sergey Shubin

das funktioniert einfach bei mir, danke! Eine Sache ist, dass wir vorher cd / usr / lib / python3 / dist-packages
Hao Yellow

-3

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"

1
Versuchen Sie genauer zu sein und erklären Sie, was diese beiden Befehle tun.
Papadopoulos

-5

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:

python3 -V

2
Python3 entfernen ist eine schlechte Idee :( Wenn Sie einen Link zu Python 3.4 möchten, verwenden Sie: ln -s /usr/bin/python3.4 / usr / bin / python3
Pamungkas Jayuda

1
Es ist nie eine gute Idee, den Leuten zu sagen, dass sie Dinge von ihrem System entfernen sollen, es sei denn, es wird wirklich benötigt. Zum Glück ist / usr / bin / python3 normalerweise sowieso nur eine symbolische Verbindung. Ich denke wirklich, Sie sollten diese Antwort einfach löschen.
Jamie Lindsey
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.