1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ubuntu 24.04 環境での pip install 仮想環境推奨の回避策

Last updated at Posted at 2025-01-02

はじめに

こんにちは、しゅんです。
Ubuntu 24.04を使い始めて最初に直面したのが、Pythonパッケージのインストールに関する問題でした。pip install numpyを実行するだけで、以下のエラーが発生します。

error: externally-managed-environment

× This environment is externally managed
╰──> To install packages in this environment, you need to explicitly opt in by using the `--break-system-packages` option.

Ubuntu 24.04では仮想環境の使用が推奨されており、システム全体に直接パッケージをインストールするには追加のオプションが必要です。しかし、毎回 --break-system-packages を入力するのは正直面倒ですし、大規模なライブラリ(例えばPyTorch)を繰り返しインストールするたびに容量が圧迫されていきます。

そこで、この問題を解決するためにシェルスクリプトを使って作業を効率化しました。その手順をこの記事で共有します。


背景と問題点

Ubuntu 24.04でのPythonパッケージ管理には以下の課題があります:

  1. エラーメッセージの頻発: 簡単なコマンドでさえ、追加オプションが必要になる。
  2. 手間の増加: --break-system-packages を毎回指定するのは煩雑。
  3. 容量問題: 仮想環境を複数作成するとストレージを圧迫。

このスクリプトを設定することで、これらの問題を一気に解消できます。


手順概要

  1. シェルスクリプトを設定: pipコマンドをラップして、pip install時に自動で--break-system-packagesを追加。
  2. 設定を反映: .bashrcまたは.zshrcに追記し、環境に適用。
  3. 動作確認: 実際にインストールコマンドを試す。

以下、詳細な手順を説明します。


設定手順

1. シェル設定ファイルを編集

使用しているシェルに応じて、次のコマンドを実行して設定ファイルを開きます:

  • Bashの場合:

    nano ~/.bashrc
    
  • Zshの場合:

    nano ~/.zshrc
    

2. カスタム関数を追加

以下のスクリプトを設定ファイルにコピー&ペーストしてください:

function pip() {
    # 引数が空の場合、または `pip --version` などの場合はそのまま実行
    if [ $# -eq 0 ]; then
        command pip
        return
    fi

    local subcmd="$1"
    shift

    # pip install の場合にのみ --break-system-packages を追加
    case "$subcmd" in
        install|uninstall)
            command pip "$subcmd" "$@" --break-system-packages
            return
            ;;
        *)
            # それ以外のサブコマンドではそのまま実行
            command pip "$subcmd" "$@"
            return
            ;;
    esac
}

function pip3() {
    # 引数が空の場合、または `pip3 --version` などの場合はそのまま実行
    if [ $# -eq 0 ]; then
        command pip3
        return
    fi

    local subcmd="$1"
    shift

    # pip3 install の場合にのみ --break-system-packages を追加
    case "$subcmd" in
        install|uninstall)
            command pip3 "$subcmd" "$@" --break-system-packages
            return
            ;;
        *)
            # それ以外のサブコマンドではそのまま実行
            command pip3 "$subcmd" "$@"
            return
            ;;
    esac
}

3. ファイルを保存して反映

保存後、以下のコマンドを実行して設定を反映します:

  • Bashの場合:

    source ~/.bashrc
    
  • Zshの場合:

    source ~/.zshrc
    

動作確認

以下のコマンドを実行して、--break-system-packagesが自動で付加されることを確認してください:

pip install numpy

実際には以下のように実行されます:

command pip install numpy --break-system-packages

なお、このスクリプトはpip installpip uninstallサブコマンドのみに反応します。他のサブコマンド(例:pip list, pip freeze)には影響を与えません。

こんな感じです

syun@syun:~$ pip install pandas
Defaulting to user installation because normal site-packages is not writeable
WARNING: Skipping /usr/lib/python3.12/dist-packages/pybind11-2.11.1.dist-info due to invalid metadata entry 'name'
Collecting pandas
  Using cached pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (89 kB)
Requirement already satisfied: numpy>=1.26.0 in /usr/lib/python3/dist-packages (from pandas) (1.26.4)
Requirement already satisfied: python-dateutil>=2.8.2 in /usr/lib/python3/dist-packages (from pandas) (2.8.2)
Requirement already satisfied: pytz>=2020.1 in /usr/lib/python3/dist-packages (from pandas) (2024.1)
Requirement already satisfied: tzdata>=2022.7 in ./.local/lib/python3.12/site-packages (from pandas) (2024.2)
Using cached pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.7 MB)
WARNING: Skipping /usr/lib/python3.12/dist-packages/pybind11-2.11.1.dist-info due to invalid metadata entry 'name'
Installing collected packages: pandas
Successfully installed pandas-2.2.3
syun@syun:~$ pip uninstall pandas
Found existing installation: pandas 2.2.3
Uninstalling pandas-2.2.3:
  Would remove:
    /home/syun/.local/lib/python3.12/site-packages/pandas-2.2.3.dist-info/*
    /home/syun/.local/lib/python3.12/site-packages/pandas/*
Proceed (Y/n)? Y
  Successfully uninstalled pandas-2.2.3
syun@syun:~$ 

終わりに

これで、Ubuntu 24.04でも快適にPythonパッケージをインストールできるようになります。
仮想環境を使わずに済むこの手法が、皆さんの開発効率を向上させる一助になれば幸いです!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?