CentOS에서 Python 업데이트 시 이슈 (Feat. PostgreSQL)

개요

최근 Python 3.6 기반의 레거시 서비스를 Python 3.9로 업데이트하였습니다. 환경이 변경하면서 서버 내 PostgreSQL Client 구성이 필요하게 되었습니다. 이 포스팅은 PostgreSQL Client의 구성과 psycopg2-binary 패키지 설치 이슈를 해결하는 과정을 정리합니다.

서비스레거시 버전업데이트 버전
python
3.6
3.9
django
3.0
4.2

문제

1. pg_config 파일을 찾지 못하는 문제

$ pip install psycopg2-binary
...
Error: pg_config executable not found.
    pg_config is required to build psycopg2 from source.  Please add the directory containing pg_config to the $PATH or specify the full executable path with the option:
  • PostgreSQL Client가 필요한 상황으로, PostgreSQL Client 설치

해결 과정

항목선택값
version
13
platform
Red Hat Entgerprise, Rocky, AlmaLiux or Oracle version 8
architecture
x86_64
$ dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
...
$ dnf -qy module enable postgresql
...
$ dnf install -y postgresql12
...
  • 자동생성된 스크립트는 server를 설치하기 때문에, 별도로 client만 설치하기 위해 스크립트를 변경하여 실행
  • 설치된 패키지의 PATH가 자동 설정되지 않기 때문에 환경변수도 설정
$ echo 'export PATH=/usr/pgsql-12/bin:$PATH' >> ~/.bashrc
$ source ~/.bashrc

2. libpq-fe.h 파일을 찾지 못하는 문제

$ pip install psycopg2-binary
...
In file included from psycopg/adapter_asis.c:28:
      ./psycopg/psycopg.h:36:10: fatal error: libpq-fe.h: No such file or directory
         36 | #include <libpq-fe.h>
            |          ^~~~~~~~~~~~
      compilation terminated.
...
  • 해당 이슈는 postgresql 라이브러리의 헤더가 없기 때문에 발생하는 에러로, devel 패키지가 필요
  • 이 과정에서 필요 의존성이 자동으로 해결되지 않아 설치되지 않음
$ dnf install -y postgresql12-devel
...
problem: cannot install the best candidate for the job
  - nothing provides perl(IPC::Run) needed by postgresql16-devel-12.22-1PGDG.rhel8.x86_64 from pgdg16

실패한 시도

  • perl-IPC-Run 패키지를 수동으로 설치하려고 했으나 실패
  • rpm 으로 직접 설치하려 시도했으나, 의존성이 지속적으로 걸려 설치가 되지 않음
  • 다른 방법으로 perl-IPC-Run 패키지를 설치 해야한다는 것을 확인

해결 과정

  • CRB(Code Ready Builder) 저장소라는 개념이 존재: 해당 저장소에 관련 패키지가 존재
  • CRB 활성화
$ crb enable
Enabling CRB repo
CRB repo is enabled and named: powertools
  • CRB 저장소를 활용하여 perl-IPC-Run 패키지 설치
$ dnf --enablerepo=powertools install -y perl-IPC-Run
  • 다시 postgresql12-devel 패키지 설치
$ dnf install -y postgresql12-devel
  • 다시 psycopg2-binary 패키지 설치
$ pip install psycopg2-binary

참고