2017-01-18 2 views
10

Я installed Python 3.6 on Ubuntu 16.04 с помощью Jonathon Fernyhough's PPA:ModuleNotFoundError в tracebacks с Python3.6 на Linux

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 "<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 

Я доложил об этом Python bug tracker. Там было отмечено, что:

Кажется, что проблема поставщика не сама CPython. Эта же проблема возникает и в Python 3.6 Ubuntu 16.10. Поднимите любое исключение может привести к этому:

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

Также см https://bugs.launchpad.net/ubuntu/+source/python3.6/+bug/1631367.

Наконец, вопрос был закрыт с комментарием

Да, это, кажется, отказ поставщика отчетности инфраструктуры , что не удается. Почему они хотят, чтобы отчет для каждой трассировки в интерактивном приглашении был выше меня, но это похоже на то, что они делают, пытается сделать.

Мои вопросы сейчас:

  1. Как интерпретировать этот комментарий? Является ли продавец в этом случае PPA Джонатоном Фернихоу? И он что-то изменил на код Python, который он распространяет, чтобы он пытался записать отчет для каждого исключения, которое создает трассировку?
  2. Кому я должен уведомлять или где мне нужно указать ошибку, чтобы решить эту проблему?
+0

Я рекомендую рекомендовать [deadsnakes ppa] (https://launchpad.net/~fkrull/+archive/ubuntu/deadsnakes). – hwjp

+0

'sudo add-apt-repository ppa: fkrull/deadsnakes' - это способ пойти имхо. –

ответ

10

После того как я отправил этот вопрос StackOverflow, Барри А. Варшавский сделал следующее comment для отслеживания проблем

Пожалуйста, обратите внимание, что установка Python 3.6 из случайного PPA делает не обеспечивают полную поддержку для этой версии интерпретатора. Python 3.6 еще не поддерживается в любой версии Ubuntu (который я предполагаю использовать), хотя мы работаем над ним для 17.04.

Очень часто, вы можете установить новый интерпретатор пакет Python 3 и многого будет работать, так как акция инфраструктуры Ubuntu модулей чисто-Python через все установленный Python 3-х. Технически говоря, у них все будут иметь/usr/lib/python3/dist-пакеты на их sys.path , поэтому любой сторонний модуль pure-Python, построенный для поддержки версии Python 3, будет импортироваться любым (с пакетом) Установленная версия Python 3.

Но это 1) далеко от того, чтобы сказать, что эти сторонние модули будут работать; 2) не включает любые пакеты, содержащие модули расширения C , которые необходимо перестроить для конкретной версии интерпретатора.

Поддержка новой версии Python - это долгий процесс, для которого мы начинаем . Пожалуйста, свяжитесь с [email protected] для .

Ubuntu делает установки стандартного обработчика исключений, так что, когда Python приложение и такие аварии, мы можем собрать статистику ДТП, так что мы можем выделять ресурсы для закрепления общих проблем и регрессий. apport (что вы видите в трассировке) - это сообщение об ошибке инфраструктуры. apport вызывает apt_pkg, который является модулем расширения (C++) и, следовательно, не будет создан для версии Python 3.6 , установленной вами из этого PPA, если, конечно, владелец PPA (кто не знает ) также выполнил архивирование Python 3 в архиве. Поскольку я в процессе настройки, и я знаю, что это совсем немного работы , я сомневаюсь, что это было сделано для этого довольно случайного PPA.

Список рассылки ubuntu-devel - лучшее место для обсуждения текущей работы , чтобы принести Python 3.6 в качестве поддерживаемой версии на Ubuntu.

Смежные вопросы