~歳月人を待たず~

カメラ・写真関連はマイクロフォーサーズとフィルムが好物。ほか雑談が多め。

【お知らせ】当ブログはアフィリエイト広告を掲載しています。

【広告欄】

pip実行時のエラーメッセージを読み解いてみた


【広告欄】

Pythonで動く静的サイトジェネレータをpipでインストールしようと思ったら、エラーが出て、半日以上を費やす大格闘になったので、記事として残しておく。

もっとも当記事の執筆を含めると、丸1日以上を要しているが…。

対象とする読者

  • Linuxについて、ある程度知っている方。
  • Pythonについて、ある程度知っている方。
  • (私のように)pipが出力する「error: externally-managed-environment」の内容が理解できない方。

【目次】


【広告欄】


本題

pip使用時のエラーメッセージ全文

$ pip3 install mkdocs
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.

    If you wish to install a non-Debian packaged Python application,
    it may be easiest to use pipx install xyz, which will manage a
    virtual environment for you. Make sure you have pipx installed.

    See /usr/share/doc/python3.12/README.venv for more information.

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.

初めてこのエラーに遭遇した際、Google翻訳にかけても、なんか良く分からん翻訳結果が出て理解不能だった。

このため、先人たちがネット上に残した記事を頼りに、何とか目的を達成できたのだが、あとからこの本文を読み返して、ようやく意味が理解できた。

以下の記事著者様について、この場を借りてお礼申し上げます。(ここだけ敬語)

以下、段落ごとに、私独自の解釈で読み解いていく。


1段落目

【原文】
This environment is externally managed.

【Google翻訳結果】
この環境は外部で管理されています。

そのまま読むと「外部管理している事は分かった。だから何?」ということになると思う。AIでももう少し具体的に…いややめよう。人のこと言えないから。

実際に意味することは、pipと呼ばれるPythonのパッケージ管理システムでパッケージをインストールしようとしているが、Debianパッケージの管理対象外であるため、そのままではインストールできないと言っている。

この一文で真の意味まで読み取れる方が居たら「クイズ王か!」とツッコミを入れてあげたい。

現実世界で例えると、マクドの商品をミスドで注文されても困る、ということ。他社商品の管理なんて知らんがな、といった感じであろうか。

なお、「パッケージ」などの表現が合っているか、いまいち自信はない。

ひとつ確実なことは、このままでは希望するPythonパッケージがインストールできないということである。

この調子で、以降の段落も読み進めてみる。

2段落目

【原文】
To install Python packages system-wide, try apt install python3-xyz, where xyz is the package you are trying to install.

【Google翻訳結果】
Python パッケージをシステム全体にインストールするには、apt install python3-xyz を試してください。xyz はインストールするパッケージ名です。

「xyz はインストールするパッケージ名」という一文について、まぁシティーハンターへの仕事依頼や、カクテル名ではないとは思っている。一応。

私は当初、バージョン・リビジョンまで指定してPythonをインストールしろと読み取ったのだが、どうやら「python3-{pipモジュール名}」という、Debianパッケージをインストールしろと言っている模様。

実際、aptでパッケージを検索すると、膨大な量のPythonパッケージが表示される。

$ apt search python3- | grep -E '^python3-' | wc -l

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

4298

上記コマンドを要約すると「python3-」と名前の付くパッケージを検索し、grep正規表現で行頭が「python3-」から始まる行だけを抽出、最後に「wc -l」で改行数をカウントしている。

なお、改行数が4298であり、厳密にはパッケージ数でない。念のため。

ちなみに私が利用したいMkDocsは「python3-」に存在しなかった。

(実はMkDocsもDebianのパッケージとして存在する事に後から知ることになるが、話が長くなるので、今回は割愛。)

3段落目

【原文】
If you wish to install a non-Debian-packaged Python package, create a virtual environment using python3 -m venv path/to/venv.

【Google翻訳結果】
Debian パッケージ以外の Python パッケージをインストールする場合は、python3 -m venv path/to/venv を使用して仮想環境を作成してください。

DebianパッケージにないPythonパッケージをインストールする場合は、venvという仮想環境作成ツールを使用して、Pythonパッケージ実行のための仮想環境を作成しろと言っている。

つまり、実環境に直接インストールするのではなく、Dockerコンテナのように仮想的に分離された環境内でPythonパッケージを実行しろと言っている。

それはともかく、本文とコマンドは分けて書いて欲しい。分かり辛いというか、上述したQiita記事を見るまで気付かなかった。

$ python3 -m venv path/to/venv

上記コマンドを要約すると、pythonの実行オプション-mでモジュール名のvenvを指定して、指定した相対パスにvenv仮想環境をディレクトリとして作成する。

4段落目

【原文】
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make sure you have python3-full installed.

【Google翻訳結果】
次に、path/to/venv/bin/python と path/to/venv/bin/pip を使用してください。python3-full がインストールされていることを確認してください。

生成した(Python実行用)仮想環境と言うか、venvで作ったディレクトリ内にある、pythonとpipを使用(実行)しろと言っている。

続けて「python3-fullがインストールされていること」と書かれているが、実はvenvモジュールを実行するためには「python3-full」をインストールしなくてはならない模様。(※未検証)

説明の順番が逆。3段落目に書いておくれよ。

なお私は、当初この文を読まずに手当たり次第に進めて、aptで「python3-venv」をインストールしているので、「python3-full」については未検証。


【2025-08-24 追記】

「python3-venv」は「python3-full」の追加パッケージのひとつとして一緒にインストールされるので、目的によっては、私が試したように「python3-venv」のインストールだけでも可。

追記ここまで。


5段落目

【原文】
If you wish to install a non-Debian packaged Python application, it may be easiest to use pipx install xyz, which will manage a virtual environment for you. Make sure you have pipx installed.

【Google翻訳結果】
Debian パッケージ以外の Python アプリケーションをインストールする場合は、仮想環境を自動的に管理する pipx install xyz を使用するのが最も簡単です。pipx がインストールされていることを確認してください。

ここまで書いて何だが、実は、Pythonアプリケーションと言っているのは、日本で言うPythonモジュール(部品)のことらしく、そもそもPython界隈でも言葉が統一されていないのが、混乱の元凶にある模様。

そして、Pythonモジュールを利用するためには、pipxパッケージのインストールが最も簡単である、と言っている。

最初に言えよ、とツッコミたくなる。

なお、pipxについては未検証だが、既にWSL内の環境がぐちゃぐちゃになっているので、Debianを再インストールしてから試してみたいと思う。

WSLだけで完結する話なのでOS再インストールも楽。

あとがきというか余談

本当は当記事に書いている以上に、もっと色々試しては戻しを繰り返している。

だが私が試したものを全部書くと、とてつもない文字数になるため、pip実行時のエラーメッセージを読み解くという部分にだけに集中して、1本の記事とした。

そもそも、今回記事を書いていて更に検証事項が増えてしまったが、本題であるMkDocsでのwebページ作りに全然進めていない。先は長そうである。


【広告欄】

個人情報保護方針(プライバシーポリシー) 問い合わせ先