I installé Python 3.6 sur Ubuntu 16.04 en utilisant PPA de Jonathon Fernyhough :
Sudo add-apt-repository ppa:jonathonf/python-3.6
Sudo apt-get update
Sudo apt-get install python3.6
J'ai créé une chaîne en utilisant la nouvelle interpolation de chaîne littérale, mais j'ai fourni un spécificateur de format non valide. J'ai non seulement obtenu le ValueError: Invalid format specifier
Attendu, mais aussi l'inattendu ModuleNotFoundError: No module named 'apt_pkg'
.
$ python3.6
Python 3.6.0 (default, Dec 29 2016, 21:40:36)
[GCC 5.4.1 20161202] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> value = 4 * 20
>>> f'the value is {value:%A}'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Invalid format specifier
Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
from apport.fileutils import likely_packaged, get_recent_crashes
File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, 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 23, in <module>
import apt
File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
Original exception was:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Invalid format specifier
Je l'ai signalé au Python bug tracker . Là, il a été noté que:
Il semble que ce soit le problème du fournisseur, pas CPython lui-même. Ce même problème se produit également dans Python 3.6 d'Ubuntu 16.10. Le déclenchement d'une exception peut provoquer ceci:
Python 3.6.0b2 (default, Oct 11 2016, 05:27:10)
[GCC 6.2.0 20161005] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> raise Exception
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Exception
Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
from apport.fileutils import likely_packaged, get_recent_crashes
File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, 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 23, in <module>
import apt
File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
Original exception was:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Exception
>>>
Voir également https://bugs.launchpad.net/ubuntu/+source/python3.6/+bug/1631367 .
Enfin, le problème a été clos avec le commentaire
Oui, cela semble être l'infrastructure de signalement des défaillances du fournisseur qui échoue. Pourquoi ils voudraient un rapport pour chaque traceback à l'invite interactive est au-delà de moi, mais cela semble être ce qu'ils essaient de faire.
Mes questions sont maintenant:
Après avoir posté cette question sur Stackoverflow, Barry A. Varsovie a fait ce qui suit commentaire au suivi des problèmes
Veuillez comprendre que l'installation de Python 3.6 à partir d'un PPA aléatoire ne pas fournit un support complet pour cette version de l'interpréteur. = Python 3.6 n'est pas encore une version prise en charge dans aucune version d'Ubuntu (que je suppose que vous utilisez), bien que nous y travaillions pour le 17.04.
Très souvent, vous pouvez installer un nouveau package d'interpréteur Python 3 et bien des choses fonctionneront car l'infrastructure Ubuntu partage des modules Python purs sur tous les Python 3) installés. Techniquement parlant, ils auront tous/usr/lib/python3/dist-packages sur leur sys.path donc tout module tiers pur Python construit pour une version de support de Python 3 sera importable par n'importe quelle version (intégrée au package) de Python 3.
Mais cela 1) est loin de dire que ces modules tiers fonctionneront; 2) n'inclut aucun paquet contenant des modules d'extension C, qui doivent être reconstruits pour la version d'interpréteur spécifique.
Prise en charge d'une nouvelle version de Python est un long processus, pour lequel nous venons de commencer. Veuillez vous engager avec [email protected] pour plus de détails.
Ubuntu installe un gestionnaire d'exceptions standard afin que lorsque Python et ces plantages, nous pouvons collecter des statistiques de plantage, afin que nous puissions consacrer des ressources à la résolution des problèmes et régressions courants. le traceback) est cette infrastructure de rapport d'incident. alloc appelle apt_pkg, qui est un module d'extension (C++) et ne sera donc pas construit pour la version de Python 3.6 que vous avez installée à partir de ce PPA, à moins bien sûr que le propriétaire du PPA (que je ne connais pas) ait également fait une reconstruction à l'échelle de l'archive Python 3. Comme je suis en train de le configurer, et je sais que c'est pas mal de travail, je doute que cela ait été fait pour ce PPA plutôt aléatoire.
La liste de diffusion ubuntu-devel est un meilleur endroit pour discuter du travail en cours pour apporter Python 3.6 en tant que version prise en charge sur Ubuntu.
J'ai résolu ce problème pour Python 3.6 en installant d'abord le package python-apt pour Python 3:
Sudo apt install python3-apt
Après cela, j'ai changé pour le dist-packages
répertoire et copié le apt_pkg[...].so
fichier avec le nouveau nom de fichier par défaut apt_pkg.so
, pour être également reconnu par Python 3.6:
cd /usr/lib/python3/dist-packages
Sudo cp apt_pkg.cpython-34m-i386-linux-gnu.so apt_pkg.so
Maintenant tout ModuleNotFoundError: No module named 'apt_pkg'
les exceptions ont disparu sur les messages d'erreur attendus.
Si la réponse la plus votée ne fonctionne pas pour vous, veuillez essayer les étapes ci-dessous (Gardez à l'esprit que vous devez changer [version]):
Sudo apt install python3-apt
cd /usr/lib/python3/dist-packages
ls
pour trouver la version correcte de apt_pkg.cpython-[version]-i386-linux-gnu.so
dans mon cas c'était 35m
Sudo cp apt_pkg.cpython-[version]-i386-linux-gnu.so apt_pkg.so
N'OUBLIEZ PAS: tapez votre [version]Dépannage
Si vous obtenez une erreur cp: cannot stat 'apt_pkg.cpython-[your-version]-i386-linux-gnu.so': No such file or directory
essayez les commandes ci-dessous:
rm -rf apt_pkg.so
Sudo cp apt_pkg.cpython-[version]-i386-linux-gnu.so apt_pkg.so
N'OUBLIEZ PAS: tapez votre [version]