奇妙なコピーなどで修正する方法をみんなが言っているのを見ますが、なぜ問題が発生するのか実際には誰も言いませんでした。
それで、私が好きな人のために、SOの誰かがそう言ったという理由だけでシステムファイルをいじりたくないという人のために説明させてください。
問題はそれです:
- 多くのシステムスクリプトには、python3シバンがハードコードされています。あなたはそれを自分でチェックすることができます:
~$ grep -R "\#\!/usr/bin/python3" /usr/lib/*
/usr/lib/cnf-update-db:
/usr/lib/command-not-found:
/usr/lib/cups/filter/pstotiff:
/usr/lib/cups/filter/rastertosag-gdi:
grep: /usr/lib/cups/backend/cups-brf: Permission denied
/usr/lib/cups/backend/hpfax:
/usr/lib/language-selector/ls-dbus-backend:
/usr/lib/python3/dist-packages/language_support_pkgs.py:
/usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py:
/usr/lib/python3/dist-packages/cupshelpers/installdriver.py:
/usr/lib/python3/dist-packages/cupshelpers/openprinting.py:
/usr/lib/python3/dist-packages/cupshelpers/xmldriverprefs.py:
/usr/lib/python3/dist-packages/cupshelpers/smburi.py:
/usr/lib/python3/dist-packages/cupshelpers/ppds.py:
/usr/lib/python3/dist-packages/cupshelpers/debug.py:
/usr/lib/python3/dist-packages/DistUpgrade/dist-upgrade.py:
/usr/lib/python3/dist-packages/CommandNotFound/db/creator.py:
/usr/lib/python3/dist-packages/CommandNotFound/db/db.py:
/usr/lib/python3/dist-packages/Quirks/quirkreader.py:
grep: /usr/lib/ssl/private: Permission denied
/usr/lib/system-service/system-service-d:
/usr/lib/ubuntu-release-upgrader/check-new-release-gtk:
/usr/lib/ubuntu-release-upgrader/do-partial-upgrade:
/usr/lib/ubuntu-release-upgrader/check-new-release:
/usr/lib/update-notifier/package-data-downloader:
/usr/lib/update-notifier/backend_helper.py:
/usr/lib/update-notifier/apt_check.py:
/usr/lib/update-notifier/apt-check:
- python apt package
python-apt
/python3-apt
はシステムパッケージなので、デフォルトのシステムpython用です
したがって、スクリプトは常に現在リンクされているバージョンを取得しpython3
ますが、aptパッケージが存在しないため失敗します。
一般的な解決策:デフォルトのpython3
リンクは絶対に変更しないでください。これまで。これはpython
リンクにも当てはまります。アプリがPython3で機能しない古い構文要素を使用してPython2で記述されている場合、アプリは機能しません。
[Python2.7で書かれていてPython3と互換性がないように見えるターミネーターを使用しているため、端末がそのように壊れました。]
ここで紹介する解決策は、aptパッケージファイルをコピー/リンクするか、python3
リンクを変更することを提案しています。
両方を分析しましょう:
- aptパッケージのコピー/リンク
Python3.4前後から、すべてのPythonスクリプトが新しいバージョンでも機能するため、これは問題にはなりません。
これまでのところ。しかし、システムを十分に長く保つと、将来的に壊れることがあります。
- 変更する
python3
リンクバック
「リンクを変更しない」に戻ることができるため、これは優れたソリューションです。
「でも、タイプするだけでいいのpython
!」- 私も好きです!それが私が最初にこの問題に到達した方法です!
一般に、システムリンクを手動で変更することは避けupdate-alternatives
てください。代わりに、異なるバージョンをリンクするために使用してください。これは、多くのバージョンを持つすべてのアプリに適用されます。これでもこれらのシステムスクリプトは壊れますが(リンクが変更されるため)、リンクと宛先を正しい順序で配置したか、タイプミスをしたかを心配することなく、簡単に切り替えることができます。
リンクまたはエイリアスにpython
/以外の名前を使用することを検討しpython3
てください。
または、システムリンクを変更せずに、(仮想環境と同じように)独自のpython
/python3
リンクをPATHに追加します。