【macOS】pipxで環境構築を行うとpythonのPATHも変更される
はじめに
以前公開した記事の通り、GRC を使った git cloneを行うためにpipx をインストールしました。
【macOS】認証情報をローカルに保存せずCodeCommitのリポジトリをgit-remote-codecommitでcloneする環境構築手順 | DevelopersIO
こちらの記事の※以降に以下のような内容を記載しております。
「※ 後ほど whichコマンドで確認すると上記からpipx でインストールされる python の PATH に変更されます。」
本記事は、これについての詳細な解説となります。
結論:pipx をインストールすると python もインストールされる?
結論を先に書くと、インストールされて PATH が Homebrew 版になります。
$ which python3
/opt/homebrew/bin/python3
この結論に至る過程を以降は記載します。
現象 1:PATH 設定をコメントアウトしても動作が変わらない
pipx installで導入したコマンド(git-remote-codecommit)を使うため、.zshrc に以下の設定を追加していました。
export PATH="$PATH:/Users/ユーザー名/.local/bin"
この行をコメントアウトして、新しいターミナルで動作確認したところ、コマンドは問題なく実行できました。
不思議に思い現在の PATH の内容を確認したところ、以下のように同じパスが 2 回連続で含まれていることに気付きました。
$ echo $PATH
...:/Users/ユーザー名/.local/bin:/Users/ユーザー名/.local/bin
複数の設定ファイルを確認したところ、.zshrcだけでなく .zprofile にも同じ PATH 設定が記載されていることが分かりました。
grep -n "local/bin" ~/.zshrc ~/.zprofile
これは、pipx ensurepath コマンドを実行した際に、複数の設定ファイルに対して同じ内容を書き込んでいたことが原因です。
正確に検証するため、.zshrcと .zprofile の両方の該当箇所をコメントアウトし、新しいターミナルで確認しました。
$ which git-remote-codecommit
git-remote-codecommit not found
not found となり、PATH 設定が必要な設定であったことが実証されました。一方だけコメントアウトした際に「動いた」ように見えたのは、もう一方の設定ファイルが機能していたためです。
対処法としては、環境変数の設定は、一般的に .zprofileにまとめておくのが慣習として推奨されます。今回は.zprofile側にのみ設定を復元し、.zshrc 側はコメントアウトしたままにすることで、重複を解消しました。
現象 2:python3 の実体がいつの間にか Homebrew 版に切り替わっていた
作業を進める中で、以下のコマンドを実行したところ、想定していなかった結果が返ってきました。
$ which python3
/opt/homebrew/bin/python3
以前は macOS 標準の Python(またはシステムにインストールされていた Python 3.9 系)を使用していたはずが、いつの間にか Homebrew 版の Python に切り替わっていました。
この変化の原因として、brew install pipx 実行時に何らかの依存関係で Python が導入されたのではないかと推測し、以下のコマンドで検証しました。
$ brew deps pipx
ca-certificates
lz4
mpdecimal
openssl@3
python@3.14
readline
sqlite
xz
zstd
依存関係の一覧に、明確に python@3.14 が含まれていることが確認できました。
さらに、実際に Homebrew 経由でインストールされている Python のバージョンを確認しました。
$ brew list --versions | grep -i python
python@3.14 3.14.7
これらの調査結果から、以下の流れが確定しました。
brew install pipx を実行
↓
Homebrewが依存関係を解決
↓
「pipxを動かすにはpython@3.14が必要」と判断
↓
python@3.14 が自動的に一緒にインストールされる
↓
Homebrewのシムリンク機構により
/opt/homebrew/bin/python3 が優先的にPATHに反映される
↓
which python3 の結果が Homebrew版に切り替わる
pipx単体をインストールしただけのつもりでも、Homebrew が依存関係として Python をインストールし、結果的にシステムの python3 コマンドの参照先を変えてしまうという点は、意図せず環境に影響を与えるケースとして覚えておく価値があります。
まとめ
| 発生した現象 | 調査結果 |
|---|---|
| PATH 設定のコメントアウトが効かなかったのはなぜか | pipx ensurepathが .zshrcと.zprofile の両方に同じ設定を書き込んでいたため |
| python3 が Homebrew 版に変わったのはなぜか | brew install pipx実行時、依存関係として python@3.14 が自動導入されたため |
まとめると上記の表のようになります。
pipxは cfn-lint のインストールでも活用して重宝しているのですが、こういった意図しない PATH の変更には注意しないといけないところだと感じました。
本記事がお役に立つことができれば幸いです。
補足:調査に使用したコマンド
今回の調査で使用したコマンド一覧です。
# PATHの重複を確認
$ echo $PATH | tr ':' '\n' | grep local/bin
# 複数の設定ファイルに同じ記述がないか確認
$ grep -n "local/bin" ~/.zshrc ~/.zprofile
# pipxが依存しているパッケージを確認
$ brew deps pipx
# Homebrewでインストール済みのPythonバージョンを確認
$ brew list --versions | grep -i python
また pipx list コマンドを使うと、pipx 経由でインストールされているツールの一覧と、
それぞれがどの Python バージョンで動いているかを確認できます。
$ pipx list
venvs are in /Users/<username>/Library/Application Support/pipx/venvs
apps are exposed on your $PATH at /Users/<username>/.local/bin
manual pages are exposed at /Users/<username>/.local/share/man
shell completions are exposed at /Users/<username>/.local/share
package cfn-lint 1.55.1, installed using Python 3.14.7
- cfn-lint
package git-remote-codecommit 1.17, installed using Python 3.14.7
- git-remote-codecommit
出力から、以下の情報が読み取れます。
- 各ツールが専用の仮想環境 (venv) にインストールされていること
- 実行ファイルの公開先が
~/.local/binであること - インストールに使われた Python バージョンが
3.14.7(Homebrew 版)であること
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AI をフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 採用サイト をぜひご覧ください。
※2026 年 1 月 アノテーション㈱から社名変更しました。





