I buntu 16.04にインストールされたPython 3.6 を使用して Jonathon FernyhoughのPPA :
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バグトラッカー に報告しました。そこでは次のことに注意されました:
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 "<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 も参照してください。
最後に、問題はコメントでクローズされました
はい、これはベンダーの障害報告インフラストラクチャであり、障害が発生しているようです。インタラクティブプロンプトですべてのトレースバックのレポートが必要な理由は私にはわかりませんが、それは彼らがやろうとしていることのようです。
私の質問は次のとおりです。
この質問をStackoverflowに投稿した後、Barry A. Warsawは次のようにしました comment issue tracker
ランダムPPAからPython 3.6をインストールすると、notはこのバージョンのインタープリターを完全にサポートします。 Python 3.6は、Ubuntuのどのバージョンでもまだサポートされているバージョンではありません(これを使用していると想定しています)。
多くの場合、新しいPython 3インタープリターパッケージをインストールできます。Ubuntuインフラストラクチャは、インストールされているすべてのPython 3's技術的に言えば、それらはすべてsys.pathに/ usr/lib/python3/dist-packagesを持つため、Python 3のサポートバージョン用に構築されたサードパーティのpure-Pythonモジュールがインポート可能になりますPython 3。
しかし、その1)は、それらのサードパーティのモジュールが機能すると言うことからは程遠いものです。 2)notには、特定のインタープリターバージョン用に再構築する必要があるC拡張モジュールを含むパッケージが含まれます。
Pythonの新しいバージョンをサポートするのは長いプロセスです。そのための作業はまだ始まったばかりです。詳細については、ubuntu-devel @ ubuntu.comに連絡してください。
Ubuntuは、標準の例外ハンドラーをインストールするため、Pythonアプリケーションとそのようなクラッシュが発生した場合、クラッシュ統計を収集できるため、一般的な問題とリグレッションの修正にリソースを充てることができます。トレースバック)は、クラッシュレポートインフラストラクチャです。apportは(C++)拡張モジュールであるapt_pkgを呼び出すため、Python 3.6のPPAからインストールしたバージョンではビルドされません。もちろん、PPAの所有者(私は知らない)もアーカイブ全体をPython 3再構築しました。私はそれを設定しているので、かなり手間がかかりますが、このかなりランダムなPPAに対して行われたとは思えません。
Ubuntu-develメーリングリストは、UbuntuでサポートされるバージョンとしてPython 3.6をもたらすための進行中の作業について議論するのに適した場所です。
最初に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'
例外が消えました。
ほとんどの回答がうまくいかない場合は、以下の手順を試してください([version])を変更する必要があることに注意してください。
Sudo apt install python3-apt
cd /usr/lib/python3/dist-packages
に移動しますls
を実行してapt_pkg.cpython-[version]-i386-linux-gnu.so
の正しいバージョンを見つけます。私の場合は35m
でしたSudo cp apt_pkg.cpython-[version]-i386-linux-gnu.so apt_pkg.so
忘れないでください:あなたの[バージョン]を入力してくださいトラブルシューティング
エラーcp: cannot stat 'apt_pkg.cpython-[your-version]-i386-linux-gnu.so': No such file or directory
が表示された場合、以下のコマンドを試してください。
rm -rf apt_pkg.so
Sudo cp apt_pkg.cpython-[version]-i386-linux-gnu.so apt_pkg.so
忘れないでください:あなたの[バージョン]を入力してください