pip install したのに ModuleNotFoundError になる原因と直し方|venv・externally-managed-environment・py コマンド

リールで見た方へ。ここでは、リールの続きとして「なぜ pip install したのに見つからないのか」の仕組みと、venv を使った直し方を、手順つきでまとめます。

pip install requests は成功した。なのに、スクリプトを動かすと ModuleNotFoundError: No module named 'requests'。「いや、さっき入れたよね?」と画面に話しかけたくなりますよね。何度入れ直しても同じエラーが出て、手が止まってしまうこともあります。

原因はたいてい、「pip が入れた先の Python」と「いま動かしている Python」が別物になっていることです。この記事では、それを確かめる方法から、venv(仮想環境)での直し方、Debian/Ubuntu で出る externally-managed-environment エラー、Windows の py コマンドまで、一緒にやってみましょう。

💡
この記事でわかること
  • まず試す直し方(venv を作って、その中で入れて動かす)
  • pip install したのに ModuleNotFoundError になる原因
  • which python3 と python3 -m pip --version での確認方法
  • venv の作り方と有効化(Linux/Mac と Windows の違い)
  • venv の入ったフォルダをコピー・移動したときに起きる「ずれ」
  • Debian/Ubuntu で pip が入っていないとき、venv が作れないとき、externally-managed-environment エラーが出たときの対処
  • Windows の py コマンドでの pip の使い方

🖥️
この記事の実行例について

Linux の実行例は、Debian 13 / Python 3.13.5 / pip 25.1.1 で実際に動かした結果です(2026年11月に実行した例です。入るパッケージのバージョンは、実行した時期によって変わります)。最小構成で作ったまっさらな Debian から始めています。お使いの環境によって、表示が少し変わることがあります。


まずはこれだけ:venv の中で入れて、venv の中で動かす

先に直し方です。プロジェクトのフォルダで、次のコマンドを上から順に打ってください。requests と app.py のところは、自分のパッケージ名とファイル名に置き換えます。

Linux / Mac の場合

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
cd 【プロジェクトのフォルダ】
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install requests
python app.py

  1. python3 -m venv .venv:プロジェクト専用の Python 環境(venv)を作ります。うまくいけば何も表示されません
  2. source .venv/bin/activate:venv を有効化します。行頭に (.venv) が付くことが多いです。続く python -m pip install --upgrade pip は任意で、venv の中の pip を新しくします(この記事の実行例は、更新前の pip 25.1.1 の表示です)
  3. python -m pip install requests:pip 単体ではなく python -m pip で入れます。こうすると「いま使っている Python に入れて」と指定できます
  4. python app.py:同じターミナルのまま動かします

Windows の場合

  • 1
  • 2
  • 3
  • 4
  • 5
py -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install requests
python app.py

2行目は PowerShell の場合です。コマンドプロンプトなら .venv\Scripts\activate.bat にします(この記事では、Windows の実行例の表示は載せていません)。

途中で止まったら:どこを読めばいい?
出てきた表示 読むところ
ensurepip is not available で venv が作れない(Debian / Ubuntu) 「Debian / Ubuntu で venv が作れないとき」
error: externally-managed-environment 「Debian / Ubuntu の externally-managed-environment エラーへの対処」
bash: pip: command not found/No module named pip 「Debian で pip が見つからないとき」
PowerShell で Activate.ps1 が実行できない 「Windows の場合」
昨日は動いたのに今日はエラー、エディタの実行ボタンだとエラー 「よくあるつまずき」

💡
新しいターミナルを開いたら、2行目の有効化からやり直してください。「昨日は動いたのに」の原因でいちばん多いのがこれです。

なぜこれで直るのかは、すぐ下で実際の表示を見ながら説明します。


pip install したのに ModuleNotFoundError になる原因

ここからは「なぜ直ったのか」です。まず、エラーの出方を見てみましょう。requests を venv(あとで説明する、プロジェクト専用の Python 環境)に入れたあと、同じ app.py を2通りの Python で動かしてみます。

  • 1
  • 2
.venv/bin/python app.py
python3 app.py

Debian 13 / Python 3.13.5 での実行例

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
kaito@demo:~/pyproj$ printf 'import requests\nprint("requests", requests.__version__)\n' > app.py
kaito@demo:~/pyproj$ cat app.py
import requests
print("requests", requests.__version__)
kaito@demo:~/pyproj$ .venv/bin/python app.py
requests 2.34.2
kaito@demo:~/pyproj$ python3 app.py
Traceback (most recent call last):
  File "/home/kaito/pyproj/app.py", line 1, in <module>
    import requests
ModuleNotFoundError: No module named 'requests'

Debian 13での実行画面

同じファイルなのに、venv の Python(.venv/bin/python)では動いて、python3 では ModuleNotFoundError になりました。requests は venv の中にしか入っていないからです(venv の外の Python にも別に入っている環境では、python3 app.py でも動くことがあります。そのときは python3 -c 'import sys; print(sys.executable)' と python3 -m pip show requests で、どの Python のどこに入っているかを確かめてください)。

パソコンの中には、Python が1つだけとは限りません。OSに最初から入っている Python、自分で入れた Python、venv の中の Python……と、いくつもあることがあります。そして、pip コマンドも、それぞれの Python ごとに別々にあるんです。

つまり、こういうことが起きています。

  • pip は、Python A にパッケージを入れた
  • python3 で動かしたのは、Python B だった
  • Python B から見ると、パッケージは入っていない → ModuleNotFoundError

pip で入れた先と、動かしている Python が違う

「入れたのに見つからない」の正体は、だいたいこのずれです。最初の直し方で venv を作り、python -m pip で入れて同じターミナルで動かしたのは、pip が入れる先の Python と、動かす Python を同じ1つにそろえるためだったんですね。


どの Python と pip を使っているか確認する

ここからは、ターミナルで実際に確かめていきます。Linux と Mac は同じコマンドで確認できます。

1. python3 の場所を確認する(which python3)
  • 1
which python3

Debian 13 / Python 3.13.5 での実行例

  • 1
  • 2
kaito@demo:~$ which python3
/usr/bin/python3

/usr/bin/python3 は、OSに最初から入っている Python です。

2. pip がどの Python に紐づいているか確認する
  • 1
  • 2
pip --version
python3 -m pip --version

Debian 13 / Python 3.13.5 での実行例

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
kaito@demo:~/pyproj$ which python3
/usr/bin/python3
kaito@demo:~/pyproj$ python3 -m pip --version
pip 25.1.1 from /usr/lib/python3/dist-packages/pip (python 3.13)
kaito@demo:~/pyproj$ pip --version
pip 25.1.1 from /usr/lib/python3/dist-packages/pip (python 3.13)

pip --version と python3 -m pip --version は、どちらも from の後ろに「どこにある pip か」、最後に (python 3.13) のように「どの Python の pip か」を表示します。この例では、どちらも同じ場所・同じバージョンなので、ずれていません。

この Debian の例では、venv の中でも外でも、pip と python3 は同じ Python を指していました(venv の中の結果は、このあとの venv の章で見せますね)。ただし、Mac で Homebrew や公式インストーラーの Python が混ざっているときや、Windows で複数のバージョンを入れているときなどは、pip と python3 が別の Python を指すこともあります。だからこそ、python -m pip で「どの Python の pip か」を指定するのが安全です。ずれが起きやすいのは、たとえば次のようなときです。

  • venv に入れたのに、venv の外の Python で動かしている(上の python3 app.py の例)
  • venv が入ったフォルダを、コピーしたり移動したりした(後半で実例を見せます)
  • エディタの実行ボタンが、別の Python を使っている

ここで、from の後ろの場所や (python 3.x) のバージョンが which python3 と食い違っていたら、それがずれの原因です。

Debian で pip が見つからないとき

Debian では、pip 自体が入っていないこともあります。最小構成の Debian 13 で試すと、こうなりました。

Debian 13 / Python 3.13.5 での実行例

  • 1
  • 2
  • 3
  • 4
kaito@demo:~$ pip install requests
bash: pip: command not found
kaito@demo:~$ python3 -m pip install requests
/usr/bin/python3: No module named pip

Debian 13での実行画面

pip コマンドがなく、python3 -m pip でも「pip というモジュールがない」と言われます。pip でパッケージを入れたいだけなら、python3-pip を入れる必要はありません。venv を作れば、venv の中に pip が用意されます。Debian で venv を作るのに必要なのは python3-venv です(下の「Debian / Ubuntu で venv が作れないとき」)。venv の外で pip コマンドを使いたい事情があるときだけ、apt で python3-pip を入れます。

参考までに、最小構成の Debian 13 で python3-pip を入れたときの様子です。

  • 1
sudo apt-get install -y python3-pip

Debian 13 での実行例(出力が長いので要点のみ)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
kaito@demo:~$ sudo apt-get install -y python3-pip
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
(途中省略)
0 upgraded, 72 newly installed, 0 to remove and 0 not upgraded.
Need to get 95.4 MB of archives.
After this operation, 364 MB of additional disk space will be used.
(途中省略)
Setting up python3-pip (25.1.1+dfsg-1) ...
(途中省略)
Setting up build-essential (12.12) ...
Processing triggers for libc-bin (2.41-12+deb13u4) ...

最小構成の環境だったので、コンパイラなどの開発用パッケージ(build-essential など)も一緒に入り、全部で72個のパッケージが追加されました。すでにいろいろ入っているPCなら、もっと少なく済むはずです。

ただし、こうして入れた pip で pip install しても、Debian では次の章で出てくる externally-managed-environment エラーで止まります。パッケージを入れるときは、このあと説明する venv を使いましょう。

詰まったらAIに聞こう①:結果の読み方が分からないときは、まとめて貼って聞いてみましょう。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
pip install したのに ModuleNotFoundError が出ます。
次の確認結果から、pip が入れた先の Python と、実行している Python が同じかどうか、
違う場合はどう直せばよいかを、初心者向けに教えてください。

OS:【例:Ubuntu 24.04/macOS/Windows 11】
エラー全文:
【ModuleNotFoundError を含むエラーの全文】
which python3 の結果:【出力】
pip --version の結果:【出力】
python3 -m pip --version の結果:【出力】

⚠️
AIに貼る前に

出力に、APIキー・パスワード・アクセストークンなどの秘密情報が含まれていないか確認してください。フォルダ名にユーザー名や社名が入っている場合も、気になるなら「***」に置き換えてから貼りましょう。


venv(仮想環境)の作り方と有効化

ずれを根本からなくすには、プロジェクトごとに専用の Python 環境(venv)を作るのがおすすめです。venv は Python に標準で付いている機能で、Python公式ドキュメント(venv、Installing Packages)でも、パッケージを入れるときは仮想環境を使う方法が案内されています。

Linux / Mac の場合

プロジェクトのフォルダに移動して、venv を作ります。ここでは .venv という名前のフォルダにしています。

  • 1
  • 2
cd 【プロジェクトのフォルダ】
python3 -m venv .venv

うまく作れたときは、何も表示されずに次の入力待ちに戻ります(Debian 13 / Python 3.13.5 で確認)。Debian や Ubuntu では、ここでエラーになることがあります。そのときは、少し下の「Debian / Ubuntu で venv が作れないとき」を見てください。

次に、有効化(activate)します。

  • 1
source .venv/bin/activate

Debian 13 / Python 3.13.5 での実行例

  • 1
  • 2
  • 3
kaito@demo:~/pyproj$ source .venv/bin/activate
(.venv) kaito@demo:~/pyproj$ which python
/home/kaito/pyproj/.venv/bin/python

有効化すると、ターミナルの行頭に (.venv) のような表示が付くことが多いです(シェルの設定によって表示は異なります)。which python も、.venv の中を指すようになりました。pip も確認してみましょう。

  • 1
  • 2
  • 3
which python3
python3 -m pip --version
pip --version

Debian 13 / Python 3.13.5 での実行例

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
(.venv) kaito@demo:~/pyproj$ which python3
/home/kaito/pyproj/.venv/bin/python3
(.venv) kaito@demo:~/pyproj$ python3 -m pip --version
pip 25.1.1 from /home/kaito/pyproj/.venv/lib/python3.13/site-packages/pip (python 3.13)
(.venv) kaito@demo:~/pyproj$ pip --version
pip 25.1.1 from /home/kaito/pyproj/.venv/lib/python3.13/site-packages/pip (python 3.13)

Debian 13での実行画面

python3 も pip も、どれも .venv の中を指していれば成功です。画面の後半は、deactivate で venv を抜けたあとの結果で、今度はどれも /usr の下(OSの Python)を指しています。venv の中でも外でも、pip と python3 はきちんと揃っていますね。

ここでパッケージを入れて、動かしてみます。

  • 1
  • 2
python -m pip install requests
python -c "import requests; print(requests.__version__)"

Debian 13 / Python 3.13.5 での実行例(出力の一部を省略)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
(.venv) kaito@demo:~/pyproj$ python -m pip install requests
Collecting requests
  Downloading requests-2.34.2-py3-none-any.whl.metadata (4.8 kB)
(途中省略)
Installing collected packages: urllib3, idna, charset_normalizer, certifi, requests
Successfully installed certifi-2026.10.23 charset_normalizer-3.5.2 idna-3.20 requests-2.34.2 urllib3-2.8.0
(.venv) kaito@demo:~/pyproj$ python -c "import requests; print(requests.__version__)"
2.34.2

Debian 13での実行画面

Successfully installed のあとに import して、バージョン(2.34.2)が表示されれば成功です。自分のスクリプトも、この有効化したターミナルで python 【ファイル名】.py のように動かします。

venv はプロジェクト専用の Python(python・pip・パッケージがセット)

作業が終わったら、次のコマンドで venv を抜けられます。

  • 1
deactivate

📝
venv は「ターミナルごと」に有効化する

新しいターミナルを開いたら、もう一度 source .venv/bin/activate が必要です。「昨日は動いたのに今日は ModuleNotFoundError」というときは、有効化を忘れていることが多いです。

venv を抜けると python コマンドがなくなる(Debian)

venv の中では python で動きますが、Debian では venv を抜けると python コマンドそのものがありません。動いている Python の場所を表示する sys.executable で、中と外を比べてみました。

  • 1
python -c 'import sys; print(sys.executable)'

Debian 13 / Python 3.13.5 での実行例

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
(.venv) kaito@demo:~/pyproj$ python -c 'import sys; print(sys.executable)'
/home/kaito/pyproj/.venv/bin/python
(.venv) kaito@demo:~/pyproj$ python -c 'import requests; print(requests.__version__)'
2.34.2
(.venv) kaito@demo:~/pyproj$ deactivate
kaito@demo:~/pyproj$ python -c 'import sys; print(sys.executable)'
bash: python: command not found
kaito@demo:~/pyproj$ /usr/bin/python3 -c 'import sys; print(sys.executable)'
/usr/bin/python3
kaito@demo:~/pyproj$ /usr/bin/python3 -c 'import requests'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
    import requests
ModuleNotFoundError: No module named 'requests'

Debian 13での実行画面

venv を抜けたあとに python と打つと command not found になります。venv の外では python3 を使ってください。そして、外の Python(/usr/bin/python3)からは、venv に入れた requests は見えません。「venv の中で入れたものは、venv の中の Python でしか使えない」と覚えておくと、ModuleNotFoundError に出会ったときに落ち着いて見直せます。

venv が入ったフォルダをコピー・移動すると、ずれる

もう一つ、気づきにくい原因があります。venv(.venv)が入ったフォルダを丸ごとコピーしたり、移動したりすることです。pyproj フォルダを myapp にコピーして、コピー先で venv を有効化してみました。

Debian 13 / Python 3.13.5 での実行例

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
kaito@demo:~/pyproj$ cd ~ && cp -r pyproj myapp && cd myapp
kaito@demo:~/myapp$ source .venv/bin/activate
(.venv) kaito@demo:~/myapp$ which python3
/home/kaito/pyproj/.venv/bin/python3
(.venv) kaito@demo:~/myapp$ pip --version
pip 25.1.1 from /home/kaito/pyproj/.venv/lib/python3.13/site-packages/pip (python 3.13)
(.venv) kaito@demo:~/myapp$ deactivate
kaito@demo:~/myapp$ .venv/bin/python -m pip --version
pip 25.1.1 from /home/kaito/myapp/.venv/lib/python3.13/site-packages/pip (python 3.13)
kaito@demo:~/myapp$ .venv/bin/pip --version
pip 25.1.1 from /home/kaito/pyproj/.venv/lib/python3.13/site-packages/pip (python 3.13)
kaito@demo:~/myapp$ head -1 .venv/bin/pip
#!/home/kaito/pyproj/.venv/bin/python3

Debian 13での実行画面

myapp にいるのに、有効化した python3 も pip も、コピー元の pyproj の venv を指しています。.venv/bin/pip の1行目にも、コピー元の場所が書き込まれたままです。一方、.venv/bin/python -m pip だけは myapp 側を指していて、同じフォルダの中でバラバラになっています。

この状態で pip install すると、コピー元の venv に入ってしまい、「入れたのに見つからない」が起きます。コピー元のフォルダを消せば、pip そのものが動かなくなることもあります。venv は「作った場所で使うもの」と考えて、コピー・移動したら作り直すのが確実です。rm -rf は、ゴミ箱を通さずにすぐ消すコマンドです。実行する前に、pwd で今いるのがプロジェクトのフォルダであることを確かめ、消すのは .venv だけにしてください。

  • 1
  • 2
  • 3
  • 4
rm -rf .venv
python3 -m venv .venv
source .venv/bin/activate
python -m pip install 【使うパッケージ名】

使っていたパッケージが多いときは、コピー元の venv で python -m pip freeze > requirements.txt として一覧を書き出しておき、新しい venv で python -m pip install -r requirements.txt とすれば、まとめて入れ直せます。

Debian / Ubuntu で venv が作れないとき

Debian や Ubuntu では、python3 -m venv .venv を実行すると、venv の作成に失敗することがあります。

Debian 13 / Python 3.13.5 での実行例

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
kaito@demo:~/pyproj$ python3 -m venv .venv
The virtual environment was not created successfully because ensurepip is not
available.  On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.

    apt install python3.13-venv

You may need to use sudo with that command.  After installing the python3-venv
package, recreate your virtual environment.

Failing command: /home/kaito/pyproj/.venv/bin/python3

Debian 13での実行画面

「ensurepip(venv の中に pip を用意する仕組み)が使えないので作れなかった。python3-venv パッケージを入れてね」という意味です。メッセージでは python3.13-venv と、Python のバージョン付きの名前が案内されています。python3-venv を入れると、python3.13-venv も一緒に入りました。

  • 1
sudo apt-get install -y python3-venv

Debian 13 での実行例(出力の一部を省略)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
kaito@demo:~/pyproj$ sudo apt-get install -y python3-venv
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  python3-pip-whl python3-setuptools-whl python3.13-venv
The following NEW packages will be installed:
  python3-pip-whl python3-setuptools-whl python3-venv python3.13-venv
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
(途中省略)
Setting up python3-setuptools-whl (78.1.1-0.1) ...
Setting up python3-pip-whl (25.1.1+dfsg-1) ...
Setting up python3.13-venv (3.13.5-2+deb13u5) ...
Setting up python3-venv (3.13.5-1) ...

メッセージの最後にある「recreate your virtual environment(作り直してね)」のとおり、失敗したときの中途半端な .venv フォルダを消してから作り直します。rm -rf は、ゴミ箱を通さずにすぐ消すコマンドです。実行する前に、pwd で今いるのがプロジェクトのフォルダであることを確かめ、消すのは .venv だけにしてください。

  • 1
  • 2
rm -rf .venv
python3 -m venv .venv

今度は何も表示されずに作成できました。あとは、上の手順どおり source .venv/bin/activate で有効化すればOKです。

Windows の場合

Windows では、venv の作り方は同じですが、有効化のコマンドが違います。Python公式ドキュメントでは、使うシェルごとに次のように案内されています。

  • 1
py -m venv .venv

コマンドプロンプト(cmd.exe)の場合(同じ1行をコマンドプロンプトに入力します):

  • 1
.venv\Scripts\activate.bat

PowerShell の場合:

  • 1
.venv\Scripts\Activate.ps1

環境 有効化のコマンド
Linux / Mac(bash・zsh) source .venv/bin/activate
Windows(コマンドプロンプト) .venv\Scripts\activate.bat
Windows(PowerShell) .venv\Scripts\Activate.ps1

Linux/Mac は bin、Windows は Scripts と、フォルダ名も違うので注意してくださいね。

PowerShell で Activate.ps1 が実行できないときは、スクリプトの実行ポリシーが原因のことがあります。Python公式ドキュメントでは、次のコマンドで現在のユーザーに対して実行を許可する方法が紹介されています。

  • 1
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

これはPCのセキュリティ設定を変える操作です。会社のPCなどでは、管理者のルールを確認してから実行しましょう。分からないときは、PowerShellではなくコマンドプロンプトで .venv\Scripts\activate.bat を使う方法もあります。

詰まったらAIに聞こう②:venv がうまく作れない・有効化できないときは、こう聞いてみましょう。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
Python の venv(仮想環境)を作って有効化したいのですが、うまくいきません。
次の情報から、原因と直し方を順番に教えてください。

OS:【例:Debian 13/macOS/Windows 11】
使っているターミナル:【例:bash/zsh/PowerShell/コマンドプロンプト】
実行したコマンド:
【実行したコマンドをそのまま】
出たメッセージ:
【エラーの全文】

Debian / Ubuntu の externally-managed-environment エラーへの対処

Debian や Ubuntu の比較的新しいバージョンで、venv を使わずに pip でパッケージを入れようとすると、次のようなエラーで止まることがあります。

  • 1
python3 -m pip install requests

Debian 13 / Python 3.13.5 での実行例

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
kaito@demo:~$ python3 -m pip install requests
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.13/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.

python3 -m pip ではなく pip install requests と打っても、同じエラーになりました。

Debian 13での実行画面

これは「この Python はOS(apt)が管理しているので、pip で直接いじらないでね」という意味です。Pythonのパッケージングの仕様(PEP 668)で決められた仕組みで、OSの道具の中には Python で動いているものもあるため、pip と apt が同じ場所を書き換えてぶつからないように守っているんですね。メッセージの中でも、apt で入れる・venv を作る・pipx を使う、という3つの方法が案内されています。

対処:venv を使う

対処はシンプルで、上で紹介した venv を作って、その中で pip を使うことです。venv の中は自分専用の場所なので、このエラーは出ません。

  • 1
  • 2
  • 3
python3 -m venv .venv
source .venv/bin/activate
python -m pip install requests

実際に、同じ Debian 13 でも、venv の中では Successfully installed ... requests-2.34.2 ... と最後まで入りました(上の「venv(仮想環境)の作り方と有効化」の実行例のとおりです)。

ほかに、ツールとして使いたいアプリ(コマンドとして使うもの)なら pipx、OSのパッケージとして用意されているライブラリなら apt で入れる、という選択肢もあります。

--break-system-packages は勧めません

エラーメッセージの note: の行に、--break-system-packages というオプションが出てきます。これを付けると、エラーを無視して入れられてしまいます。でも、この記事ではおすすめしません。理由は次のとおりです。

  • apt が入れたパッケージを pip が上書きして、OSの道具が動かなくなるおそれがある
  • あとで apt でアップデートしたときに、pip で入れたものとぶつかることがある
  • 名前のとおり「システムのパッケージを壊すかもしれない」ことを承知で使うオプションで、メッセージにも「at the risk of breaking your Python installation or OS(Python やOSを壊すリスクがある)」と書かれている

エラーを消すためだけに付けるのではなく、venv を使うのが安全です。

詰まったらAIに聞こう③:venv の外で使いたい事情があるときは、付ける前に相談してみましょう。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
Debian/Ubuntu で pip install をしたら externally-managed-environment エラーが出ました。
--break-system-packages は使わずに解決したいです。
次の目的に合う方法(venv/pipx/apt のどれが合うか、その手順)を教えてください。

OS とバージョン:【例:Debian 13】
入れたいパッケージ:【パッケージ名】
使い方:【例:自分のスクリプトで import したい/コマンドとして使いたい】
エラー全文:
【エラーの全文】

Windows の py ランチャーで pip を使う

Windows では、python コマンドのほかに、py コマンドがあります。Python公式ドキュメント(Using Python on Windows)では、普段は python を、複数のバージョンを使い分けるときは py を使う形で案内されています。

Windows でも、pip は「どの Python に入れるか」を指定する形で使うのが基本です。

  • 1
py -m pip install requests

バージョンを指定したいときは、次のように書けます(3.13 の部分は、入っているバージョンに合わせてください)。

  • 1
py -3.13 -m pip install requests

入っている Python の一覧と場所を確認するには、次のコマンドがあります。

  • 1
py -0p

最近の Windows 向けの Python では、「Python install manager」という新しい仕組みに変わってきています。公式ドキュメントでは、この新しい仕組みでは py list で一覧を確認でき、py -0p などの従来のコマンドも互換性のために残されていると説明されています。従来の「Python launcher」(py.exe)を使っている場合は、py --list でも一覧を表示できます。

📝
Windows の表示は環境により異なります

Python の入れ方(Python install manager、従来のインストーラー、Microsoft Store など)やバージョンによって、使えるコマンドや表示の形式が変わります。この記事では、Windows の出力例は載せていません。うまくいかないときは、Python公式ドキュメントの「Using Python on Windows」のトラブルシューティングもあわせて確認してください。

python と py の違いや、python と打つと Microsoft Store が開いてしまうときの確認方法は、Python入門|環境構築と最初の1本を動かすで詳しく整理しています。


よくあるつまずき

症状 原因 対処
昨日は動いたのに、今日は ModuleNotFoundError 新しいターミナルで venv を有効化していない source .venv/bin/activate(Windows は .venv\Scripts\activate.bat など)を実行する
bash: pip: command not found/No module named pip Debian で pip が入っていない venv を使う(作れなければ sudo apt-get install -y python3-venv)。venv の外で pip コマンドがどうしても必要なときだけ python3-pip
bash: python: command not found Debian では venv の外に python コマンドがない venv の外では python3 を使う
ensurepip is not available で venv が作れない python3-venv が入っていない sudo apt-get install -y python3-venv のあと、.venv を消して作り直す
フォルダをコピー・移動したら、入れたはずのパッケージが見つからない venv がコピー元の場所を指したままになっている .venv を消して、その場所で作り直す
ターミナルでは動くのに、エディタの実行ボタンだと失敗する エディタが別の Python を使っている エディタで使う Python(インタープリター)に、venv の Python を選ぶ。設定画面は環境により異なります
pip install した名前と import する名前が違う パッケージ名と import 名が違うものがある 例:pip install beautifulsoup4 → import bs4、pip install Pillow → import PIL。パッケージの公式ページで確認する
externally-managed-environment と出る OS が管理している Python に pip で入れようとした venv を作って、その中で入れる
sudo pip install したら余計にややこしくなった OS全体の Python を書き換えようとした sudo 付きの pip は避けて、venv を使う(公式の Installing Packages でも、sudo で実行しないよう書かれています)
何度入れ直しても同じエラー 入れている Python と動かしている Python が違うまま python -m pip --version と python -c 'import sys; print(sys.executable)' の結果を見比べて、同じ場所を指しているか確かめる

詰まったらAIに聞こう④:エディタとターミナルで結果が違うときは、こう聞いてみましょう。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
ターミナルでは動く Python スクリプトが、エディタの実行ボタンだと ModuleNotFoundError になります。
エディタが使っている Python を、プロジェクトの venv(.venv)に合わせる方法を教えてください。

エディタ:【例:Cursor/VS Code】
OS:【OS】
venv の場所:【例:プロジェクト直下の .venv】
エディタで実行したときのエラー全文:
【エラーの全文】
(エラーの全文に、ユーザー名や社名を含むパスがあれば「***」に置き換えます)

次の一歩

「pip は python -m pip で使う」「プロジェクトごとに venv を作る」。この2つを習慣にすると、ModuleNotFoundError に悩まされることはぐっと減ります。

venv の準備ができたら、実際にライブラリを入れて何か作ってみましょう。Pythonで毎朝のCSV集計を自動化する(pandas+定期実行)では、pandas を使ってCSVを集計するスクリプトを作っています。今回作った venv の中で python -m pip install pandas をしてから進めれば、ちょうどいい練習になります。

動くようになって、次に「処理が重いな」と感じてきたら、Pythonを速くする考え方をまとめた『爆速Pythonの作り方』もあります。


関連する本・記事

記事:

本: