ウェブサイト検索

Ubuntu 22.04/20.04でPython 3.12用の壊れたpipを修正する


この簡単なチュートリアルでは、Ubuntu 22.04およびUbuntu 20.04でDeadsnakes PPAからPython 3.12をインストールした後に壊れたpipインストーラーを修正する方法を示します。

古いsetuptoolsを使用しているLinuxのPython 3.12では、長らく非推奨されたpkgutil.ImpImporterクラスが削除されたため、pipコマンドが動作しない可能性があります。何かをpip installでインストールしようとすると、動作しないか、次のエラーが出力されます:

ERROR: Exception:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/pip/_internal/cli/base_command.py", line 165, in exc_logging_wrapper
    status = run_func(*args)
             ^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/pip/_internal/cli/req_command.py", line 205, in wrapper
    return func(self, options, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/pip/_internal/commands/install.py", line 285, in run
    session = self.get_default_session(options)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/pip/_internal/cli/req_command.py", line 75, in get_default_session
    self._session = self.enter_context(self._build_session(options))
                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/pip/_internal/cli/req_command.py", line 89, in _build_session
    session = PipSession(
              ^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/pip/_internal/network/session.py", line 282, in __init__
    self.headers["User-Agent"] = user_agent()
                                 ^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/pip/_internal/network/session.py", line 157, in user_agent
    setuptools_dist = get_default_environment().get_distribution("setuptools")
                      ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/pip/_internal/metadata/__init__.py", line 24, in get_default_environment
    from .pkg_resources import Environment
  File "/usr/lib/python3/dist-packages/pip/_internal/metadata/pkg_resources.py", line 9, in 
    from pip._vendor import pkg_resources
  File "/usr/lib/python3/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 2164, in 
    register_finder(pkgutil.ImpImporter, find_on_path)
                    ^^^^^^^^^^^^^^^^^^^
AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?

問題を解決するためには、Python 3.12のpipを手動でインストールする必要があります。そして、作業を行う方法が2つあります。

方法1: ensurepipを使用してpipをインストールする

Pythonには、既存のPythonインストールにpipインストーラをブートストラップするためのサポートを提供する組み込みモジュールensurepipがあります。

まず、キーボードでCtrl+Alt+Tを押してターミナルを開きます。ターミナルが開いたら、次のコマンドを実行します:

python3.12 -m ensurepip --upgrade

その後、pip3.12 または python3.12 -m pip コマンドのいずれかを使用して、Python 3.12のpipインストーラーを使用できるようになるはずです。

方法2: get-pip.pyを使用してpipをインストールする

前の方法がうまくいかない場合、Pypa.io は同じことを行うスクリプトを提供しています。

まず、ターミナルを開き(Ctrl+Alt+T)、wgetコマンドを使用してスクリプトをダウンロードするためのコマンドを実行します:

wget https://bootstrap.pypa.io/get-pip.py

次に、スクリプトを実行してpipをダウンロードしてインストールします:

python3.12 get-pip.py

インストール後、python3.12 -m pip コマンドを実行して pip インストーラーを使用できます。これを pip3.12 にバインドするには、ただ alias pip3.12="python3.12 -m pip" を実行してください。

それだけです。楽しんでください!

関連記事: