pythonで、postgresql に書き込むためのコード–break-system-packagesは非推奨 じゃどうする?

Linux

本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^

DBアクセスに必要なパッケージを準備

apt update
apt install python3-pip
apt install python3-full

その後、このコマンドを実行しようとしたら

pip3 install psycopg2-binary pytz

こんなエラーが

pip3 install psycopg2-binary pytz
error: externally-managed-environment

× This environment is externally managed
mq> 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.11/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.

Debian 12 の Python 環境が「外部管理モード(PEP 668)」になっているため、システム全体にパッケージをインストールできない事を意味する。

全体にインストールする場合(非推奨)

pip install psycopg2-binary --break-system-packages

非推奨の理由 --break-system-packages は危険なオプション

システムツールを破損する可能性がある

Debian の多くのツール(apt, systemctl, network-manager, gnome, など)は Python スクリプトで動いています。pip でライブラリを上書きすると、依存関係の不整合が起きて、ツールが動かなくなる可能性があります。

パッケージ管理の混乱

apt と pip が同じライブラリを管理すると、どちらが正しいか分からなくなる状態になります。例:

apt install python3-psycopg2 → バージョン A
pip install psycopg2 → バージョン B(上書き)
この状態で apt upgrade や pip uninstall をすると、予期せぬ挙動が起きることがあります。

セキュリティアップデートの漏れ

Debian のセキュリティアップデートは apt 経由で提供されますが、pip でインストールしたライブラリは対象外です。結果として、脆弱性が放置される可能性があります。

トラブル時の復旧が困難

システム Python を壊すと、復旧にはかなりの手間がかかります。最悪の場合、OS の再インストールが必要になることもあります。

pip でインストールしちゃったものを削除する

pip uninstall psycopg2-binary --break-system-packages

rootユーザで実行しているので警告が出たけどとりあえず削除できた

Proceed (Y/n)? 
  Successfully uninstalled psycopg2-binary-2.9.10
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

タイムスタンプをレコードに記録するため、ptyzもいれたけど削除

 pip uninstall pytz --break-system-packages
Found existing installation: pytz 2024.1
Uninstalling pytz-2024.1:
  Would remove:
    /usr/lib/python3/dist-packages/pytz
    /usr/lib/python3/dist-packages/pytz-2024.1.egg-info
Proceed (Y/n)? 
  Successfully uninstalled pytz-2024.1
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

仮想環境を作成する(推奨)

apt install python3.11-venv

# 仮想環境作成
python3 -m venv ~/venv/edr
# 仮想環境の有効化
source ~/venv/edr/bin/activate

# 仮想環境内でインストール
pip install pytz psycopg2-binary
Collecting pytz
  Downloading pytz-2025.2-py2.py3-none-any.whl (509 kB)
     qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq 509.2/509.2 kB 5.6 MB/s eta 0:00:00
Collecting psycopg2-binary
  Downloading psycopg2_binary-2.9.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.0 MB)
     qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq 3.0/3.0 MB 11.9 MB/s eta 0:00:00
Installing collected packages: pytz, psycopg2-binary
Successfully installed psycopg2-binary-2.9.10 pytz-2025.2

実行方法

# /root/venv/edr/bin/python3 password_clack_detector_sql.py
[Mon Jul 21 12:01:05 2025] 監視を開始します: /var/log/auth.log
ユーザーごとの閾値: 5回 (300秒以内)
IPアドレスごとの閾値: 10回 (300秒以内)

このサーバーのローカルIPアドレス: 192.168.10.30

削除方法

仮想環境が有効になっていない事を確認し、

which python

仮想環境ディレクトリを削除する

rm -rf ~/venv/edr

代替手段 私はこちらの方法を採用

python3-pytz-deprecation-shim は、Python のタイムゾーンライブラリである pytz を安全に廃止するための「shim(橋渡し)」ライブラリです。


sudo apt install python3-pytz-deprecation-shim python3-psycopg2 python3-tz

APT でインストールされた python3-psycopg2 は、システムの Python パッケージとして管理されます。そのまま使う限り、pip による干渉はありません。

python3-psycopg2 を APT でインストールすること自体でシステムが壊れることは基本的にありません。APT は Debian や Ubuntu などの Linux ディストリビューションで公式にサポートされている方法であり、依存関係も適切に管理されます。

APT はシステムパッケージマネージャであり、OSの他の部分と整合性を保つように設計されています。

python3-psycopg2 は PostgreSQL 用の公式 Python バインディングであり、Debian/Ubuntu の公式リポジトリに含まれています。

インストール時に必要なライブラリ(例:libpq-dev)も一緒に管理されるため、依存関係の破損は起こりにくいです。

apt 管理でインストールできれば、通常のアップデートサイクルで最新のライブラリが更新されていくのでapt管理が楽だと思う。

pgadmin4の設定

設定メモ

pgAdmin 4 (APT)

postgresql 初期設定

pg_hba.conf

host    all             all             127.0.0.1/32           trust 
host    all             all             0.0.0.0/0            trust

postgresql.confi

listen_addresses = '*'          # what IP address(es) to listen on;

パスワードはdummy で設定

postgresユーザのパスワードを設定

pg_hba.conf

# IPv4 local connections:
#host    all             all             127.0.0.1/32            scram-sha-256
host    all             all             127.0.0.1/32           scram-sha-256
host    all             all             0.0.0.0/0              scram-sha-256

reload

# /etc/init.d/postgresql reload
Reloading postgresql configuration (via systemctl): postgresql.service.
タイトルとURLをコピーしました