🐍
[備忘録]pipを実行時の「error: externally-managed-environment」の解決方法
クリーンなPC(WSL2)でpip3 install ...
を実行したらerror: externally-managed-environment
エラーが発生したので、対処法の備忘録。
前提として、開発やツール、プログラムで使うようなライブラリをインストールするときは、venvを使用しています。今回はCLIアプリをWSL2のシステムにインストールしたい時の対処法です。
➜ ~ pip3 install ...
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try brew install
xyz, where xyz is the package you are trying to
install.
If you wish to install a Python library that isn't in Homebrew,
use a virtual environment:
python3 -m venv path/to/venv
source path/to/venv/bin/activate
python3 -m pip install xyz
If you wish to install a Python application that isn't in Homebrew,
it may be easiest to use 'pipx install xyz', which will manage a
virtual environment for you. You can install pipx with
brew install pipx
You may restore the old behavior of pip by passing
the '--break-system-packages' flag to pip, or by adding
'break-system-packages = true' to your pip.conf file. The latter
will permanently disable this error.
If you disable this error, we STRONGLY recommend that you additionally
pass the '--user' flag to pip, or set 'user = true' in your pip.conf
file. Failure to do this can result in a broken Homebrew installation.
Read more about this behavior here: <https://peps.python.org/pep-0668/>
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.
システム全体にPythonパッケージをインストールするならHomebrew使ってね。それ以外は仮想環境を使用してね。というようなエラーメッセージ。
無視する方法(--break-system-packages
)や無効にする方法も記載されているが、好まないので割愛。
HomebrewってMac用じゃない?って思ったけど、Linux向けでもある(The Missing Package Manager for macOS (or Linux))ので、Homebrewもインストールする。
インストール手順は公式サイトを見てください。
➜ ~ test -d ~/.linuxbrew && eval "$(~/.linuxbrew/bin/brew shellenv)"
➜ ~ test -d /home/linuxbrew/.linuxbrew && eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
➜ ~ echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >> ~/.bashrc
➜ ~ echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >> ~/.zshrc #zsh使ってる場合はこっちかな
最初のエラーに従いpipx
を入れる
➜ ~ brew install pipx
(省略)
➜ ~ pipx --version
1.7.1
pipx ensurepath
で環境変数設定を行う
➜ ~ pipx ensurepath
Success! Added /home/red/.local/bin to the PATH environment variable.
Consider adding shell completions for pipx. Run 'pipx completions' for instructions.
You will need to open a new terminal or re-login for the PATH changes to take effect. Alternatively, you can source
your shell's config file with e.g. 'source ~/.bashrc'.
Otherwise pipx is ready to go! ✨ 🌟 ✨
要再ログイン
自分はzshを使ってるけど、.zprofileを見たら、ちゃんと登録されていたので多分問題ないと思う。
➜ ~ cat .zprofile
# Created by `pipx` on 2024-09-04 01:29:03
export PATH="$PATH:/home/red/.local/bin"
後は pipx install ...
でライブラリを追加することができる
余談
pipx ensurepath
を実行した時に、pipxのシェル補完も追加検討してね。って言われてるので、せっかくなので入れる。
pipx completions
を実行すると、各シェルごとの設定が出てくるので、その通りに行う。
➜ ~ autoload -U compinit && compinit
➜ ~ eval "$(register-python-argcomplete pipx)"
zsh: command not found: register-python-argcomplete #register-python-argcompleteが無いって言われる
➜ ~ pipx install argcomplete
installed package argcomplete 3.5.0, installed using Python 3.12.5
These apps are now globally available
- activate-global-python-argcomplete
- python-argcomplete-check-easy-install-script
- register-python-argcomplete
done! ✨ 🌟 ✨
➜ ~ eval "$(register-python-argcomplete pipx)"
➜ ~ pipx --global # 補完が効くかテスト
--global -- Perform action globally for all users.
--help -h -- show this help message and exit
--quiet -q -- Give less output. May be used multiple times corresponding to the ERROR and CRITICAL logging le
--verbose -v -- Give more output. May be used multiple times corresponding to the INFO, DEBUG and NOTSET loggin
--version -- Print version and exit
completions -- Print instructions on enabling shell completions for pipx
ensurepath -- Ensure directories necessary for pipx operation are in your PATH environment variable.
environment -- Print a list of environment variables and paths used by pipx.
inject -- Install packages into an existing Virtual Environment
...
問題なくできた 😎
Discussion