我使用Jonathon Fernyhough的PPA 在Ubuntu 16.04上安装了Python 3.6:
sudo add-apt-repository ppa:jonathonf/python-3.6 sudo apt-get update sudo apt-get install python3.6
我使用新的文字字符串插值创建了一个字符串,但是我提供了一个无效的格式说明符.我不仅得到了预期ValueError: Invalid format specifier
,而且出乎意料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 "", line 1, in 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 from apport.report import Report File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in import apport.fileutils File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in from apport.packaging_impl import impl as packaging File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 23, in import apt File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in import apt_pkg ModuleNotFoundError: No module named 'apt_pkg' Original exception was: Traceback (most recent call last): File " ", line 1, in ValueError: Invalid format specifier
我向Python bug跟踪器报告了此情况.有人指出:
似乎供应商的问题不是CPython本身.同样的问题也发生在Ubuntu 16.10的Python 3.6中.提出任何异常都可能导致此问题:
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 "", line 1, in 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 from apport.report import Report File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in import apport.fileutils File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in from apport.packaging_impl import impl as packaging File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 23, in import apt File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in import apt_pkg ModuleNotFoundError: No module named 'apt_pkg' Original exception was: Traceback (most recent call last): File " ", line 1, in Exception >>>
另请参阅https://bugs.launchpad.net/ubuntu/+source/python3.6/+bug/1631367.
最后,问题以评论结束
是的,这似乎是供应商失败的报告基础设施失败.为什么他们想要在交互式提示下为每个回溯报告都超出我的范围,但这似乎是他们想要做的事情.
我现在的问题是:
我该如何理解这个评论?在这种情况下,Jonathon Fernyhough的PPA是供应商吗?他是否将某些内容更改为他分发的Python代码,以便它尝试为每个产生回溯的Exception提交报告?
我需要通知谁或者我需要在哪里提交错误才能解决此问题?
andreas.. 30
我通过首先安装Python 3的python-apt包解决了Python 3.6的这个问题:
sudo apt install python3-apt
之后,我切换到dist-packages
目录并将apt_pkg[...].so
文件复制到新的默认文件名apt_pkg.so
,以便Python 3.6识别:
cd /usr/lib/python3/dist-packages sudo cp apt_pkg.cpython-34m-i386-linux-gnu.so apt_pkg.so
现在所有ModuleNotFoundError: No module named 'apt_pkg'
异常都会在预期抛出的错误消息上消失.
我通过首先安装Python 3的python-apt包解决了Python 3.6的这个问题:
sudo apt install python3-apt
之后,我切换到dist-packages
目录并将apt_pkg[...].so
文件复制到新的默认文件名apt_pkg.so
,以便Python 3.6识别:
cd /usr/lib/python3/dist-packages sudo cp apt_pkg.cpython-34m-i386-linux-gnu.so apt_pkg.so
现在所有ModuleNotFoundError: No module named 'apt_pkg'
异常都会在预期抛出的错误消息上消失.
在我向Stackoverflow发布此问题后,Barry A. Warsaw 对问题跟踪器发表了以下评论
请理解从随机PPA安装Python 3.6并 不能完全支持此版本的解释器.Python 3.6在任何版本的Ubuntu中都不是受支持的版本(我假设你使用它),尽管我们正在为17.04开发它.
通常,您可以安装新的Python 3解释器包,并且很多东西都可以工作,因为Ubuntu基础架构在所有已安装的Python 3中共享纯Python模块.从技术上讲,他们将在sys.path上都有/ usr/lib/python3/dist-packages,因此任何为Python 3支持版本构建的第三方纯Python模块都可以通过任何(包构建的)安装版本导入Python 3
但是,1)距离说那些第三方模块能够工作还有很长的路要走.2)不不包括含有C扩展模块,其必须被重建为特定解释版本的任何包.
支持新版本的Python是一个漫长的过程,我们刚刚开始.有关详细信息,请与ubuntu-devel@ubuntu.com联系.
Ubuntu确实安装了一个标准的异常处理程序,这样当Python应用程序崩溃时,我们就可以收集崩溃统计信息,以便我们可以投入资源来解决常见问题和回归.apport(你在追溯中看到的)是崩溃报告基础设施.apport调用apt_pkg,这是一个(C++)扩展模块,因此不会为从PPA安装的Python 3.6版本构建,除非PPA所有者(我不知道)也做过存档范围的Python 3重建.由于我正在设置它,我知道这是相当多的工作,我怀疑这是相当随机的PPA.
ubuntu-devel邮件列表是讨论将Python 3.6作为Ubuntu支持版本的持续工作的更好地方.