web-dev-qa-db-fra.com

erreur d'installation de python-dev: ImportError: Aucun module nommé apt_pkg

Je suis un utilisateur Debian et je veux installer python-dev, mais quand je lance le code dans le shell en tant que root

# aptitude install python-dev

Je reçois l'erreur suivante:

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

Quel semble être le problème et comment puis-je le résoudre?

36
Belphegor

Assurez-vous que votre paquet python-apt fonctionne. Vous pouvez essayer de supprimer et d'installer à nouveau ce paquet pour résoudre le problème de la non localisation d'apt_pkg.so.

apt-get install python-apt
37
Arnestig

J'ai rencontré ce problème en faisant Sudo apt-get update. Mon env est debian8, avec python2.7 + 3.4 (par défaut) + 3.5.

Le code suivant ne recréera qu'un fichier apt_pkg....so pour python 3.5

Sudo apt-get install python3-apt --reinstall

Le code suivant a résolu mon problème,

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

Donc, évidemment, python3-apt vérifie la version la plus récente de python, au lieu de la version actuelle de python utilisée.

56
zhazha

Résoudre par ceci:

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

Ou:

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

Fondamentalement, si vous obtenez un No such file or directory juste ls pour essayer d’obtenir le bon nom.

47
user8178061

J'ai récemment rencontré le même problème chaque fois que j'exécutais un script Python 3.3.0 dans Aptana Studio avec Ubuntu Quantal. En plus de l'erreur du script sur lequel je travaille, les éléments suivants sont mélangés:

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'

J'ai essayé de supprimer, de nettoyer, de purger et de réinstaller python3-apt et de fouiller un peu, et j'ai constaté que l'erreur n'affecte que Python 3.3.0. Essayer d'importer apt_pkg dans IDLE aboie la même erreur. Fait intéressant, importer ceci en utilisant IDLE avec Python 3.2.3 fonctionne bien. De plus, les deux versions de Python 3.x.x partagent le même /usr/lib/python3/dist-packages, dans lequel se trouvent apt_pkg.cpython-32mu.so et apt_pkg.cpython-32dmu.so. Ces fichiers ne sont-ils pas compatibles avec Python 3.3.0?

Une dernière chose, exécuter le script en dehors d’Aptana Studio me donne l’erreur de mon script sans le message ImportError: No module named 'apt_pkg'.

5
Roberto

Pour une raison quelconque, mon installation manquait de apt_pkg.so dans le répertoire python3 dist-packages. (apt_pkg.cpython-33m-x86_64-linux-gnu.so y était?!) mais et je devais créer un lien symbolique apt_pkg.so -> apt_pkg.cpython-33m-x86_64-linux-gnu.soin /usr/lib/python3/dist-packages

Je ne sais pas si ma mise à niveau a été interrompue ni pourquoi cela a été le cas. Il s'est produit après avoir essayé de mettre à niveau (précision-> raring-> amélioration quantique)

4
Jamie Pate

Cette erreur se produit souvent lorsqu'une version plus récente de python a été installée avec une version plus ancienne, par exemple;

  • Ubuntu 18.04.1 est livré avec la version 3.6.6 de Python 
  • PPA installé: deadsnakes/python3.7.1 ou une alternative
  • Exécutez une commande qui utilise le module apt_pkg et obtenez une erreur telle que;

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

Lorsque nous installons une version non distro de python3 avec apt, elle définira un répertoire de module partagé comme étant celui de python3. Le plus souvent, il utilisera/usr/lib/python3. 

La plupart du temps, tout ira bien, mais dans certaines circonstances, les différentes versions de python reposent sur des bibliothèques ou des objets/bibliothèques partagés différents de version python. Donc, si nous avons installé python3.6 sur un système 64 bits, le lien apt_pkg .SO sera 

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

Mais le problème réside dans le fait que lorsque nous installons une version plus récente de python, le lien se met à jour pour pointer vers la dernière version de python, ce qui entraîne la non-détection de l'erreur du module apt_pkg . votre distribution vous pouvez créer le lien comme indiqué ci-dessus . Nous utilisons également une méthode pour offrir à la commande un choix de versions de python pour lier le .SO, telle que;

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

Parce que python créera ce lien vers la dernière version de python installée, nous donnons à la commande la possibilité de choisir parmi 3 versions de python, parmi lesquelles elle choisira la version la plus élevée donnée.

3
Jamie Lindsey

Si vous utilisez python 3.5, rétrogradez la version 3.4. C'est le geste le plus sûr à faire.

Sous /usr/lib/python3/dist-packages, vous verrez *34m* que python 3.5 ne peut pas utiliser. zhazha répond à un lien symbolique.

2
Pobe

Un dernier recours est 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 Si la commande ln est trop lourde pour vous ou ne fonctionne pas comme par magie.

cp ci-dessus peut également être mv si vous êtes uniquement dédié à l’utilisation d’une version Python.

1
Tong Niu

En plus de créer un lien symbolique pour apt_pkg.so, vous pouvez également créer apt_inst.so de la même manière que apt_pkg.so.

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

Essayez de résoudre ce problème en définissant les variables de paramètres régionaux:

export LC_ALL="en_US.UTF-8"

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