M1에서 마주한 psycopg2-binary install error

Jihun Kim·2022년 5월 13일
0

기타

목록 보기
5/12
post-thumbnail

파이썬 버전을 업데이트 하며 마주친 에러 공유


오늘 파이썬 버전 3.8.1 -> 3.9.9로 업데이트 하면서 마주한 에러를 리포트 한다.

파이썬은 현재 버전 3.10.4까지 release 되었다. zappa를 사용해 lambda로 서버를 실행하는 우리 서비스는 람다가, 혹은 자파가 지원하는 파이썬 버전에 민감할 수밖에 없다. 현재 zappa는 파이썬 버전 3.9.9까지 지원되기 때문에 우리 서비스는 파이썬 버전 3.9.9까지 업데이트를 하기로 했다.


psycopg2-binary intall시 발생 하는 에러

문제는 맥북 M1 + OS Big Sur 이상인 경우에 발생했다.
다음과 같은 에러가 발생한다.

에러 내용

$ pip install psycopg2-binary
Collecting psycopg2-binary
  Using cached psycopg2-binary-2.8.6.tar.gz (384 kB)
    ERROR: Command errored out with exit status 1:
     command: /Users/amar/test3/.venv/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/73/97rprb4s6qz9qc7n8xy0vt800000gn/T/pip-install-jo9na1rs/psycopg2-binary/setup.py'"'"'; __file__='"'"'/private/var/folders/73/97rprb4s6qz9qc7n8xy0vt800000gn/T/pip-install-jo9na1rs/psycopg2-binary/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /private/var/folders/73/97rprb4s6qz9qc7n8xy0vt800000gn/T/pip-pip-egg-info-mgvwjdyx
         cwd: /private/var/folders/73/97rprb4s6qz9qc7n8xy0vt800000gn/T/pip-install-jo9na1rs/psycopg2-binary/
    Complete output (23 lines):
    running egg_info
    creating /private/var/folders/73/97rprb4s6qz9qc7n8xy0vt800000gn/T/pip-pip-egg-info-mgvwjdyx/psycopg2_binary.egg-info
    writing /private/var/folders/73/97rprb4s6qz9qc7n8xy0vt800000gn/T/pip-pip-egg-info-mgvwjdyx/psycopg2_binary.egg-info/PKG-INFO
    writing dependency_links to /private/var/folders/73/97rprb4s6qz9qc7n8xy0vt800000gn/T/pip-pip-egg-info-mgvwjdyx/psycopg2_binary.egg-info/dependency_links.txt
    writing top-level names to /private/var/folders/73/97rprb4s6qz9qc7n8xy0vt800000gn/T/pip-pip-egg-info-mgvwjdyx/psycopg2_binary.egg-info/top_level.txt
    writing manifest file '/private/var/folders/73/97rprb4s6qz9qc7n8xy0vt800000gn/T/pip-pip-egg-info-mgvwjdyx/psycopg2_binary.egg-info/SOURCES.txt'
    
    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:
    
        python setup.py build_ext --pg-config /path/to/pg_config build ...
    
    or with the pg_config option in 'setup.cfg'.
    
    If you prefer to avoid building psycopg2 from source, please install the PyPI
    'psycopg2-binary' package instead.
    
    For further information please check the 'doc/src/install.rst' file (also at
    <https://www.psycopg.org/docs/install.html>).

해결책은 다음과 같았다.

해결책

$ brew install postgresql

$ brew link openssl
Warning: Refusing to link macOS provided/shadowed software: openssl@1.1
If you need to have openssl@1.1 first in your PATH, run:
  echo 'export PATH="/opt/homebrew/opt/openssl@1.1/bin:$PATH"' >> ~/.zshrc

For compilers to find openssl@1.1 you may need to set:
  export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib"
  export CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include"

For pkg-config to find openssl@1.1 you may need to set:
  export PKG_CONFIG_PATH="/opt/homebrew/opt/openssl@1.1/lib/pkgconfig"
  • brew를 사용해 postgresql을 install 한다.
  • 그 다음 openssl에 대한 link를 통해 매핑을 해준다.
    - SSL(Secure Sockets Layer)은 인터넷을 통해 클라이언트와 서버가 통신할 때 통신 내용을 안전하게 보호하는 방법이다.
    - 이 때 openssl은 데이터통신을 위한 TLS, SSL 프로토콜을 이용할 수 있는 오픈소스 라이브러리이다.
    - brew link는 Cellar에서 수동으로 수행한 설치에 대한 심볼릭 링크를 생성해 준다. 이를 통해 사용자 스스로 설치할 수 있는 유연성을 가짐과 동시에 homebrew에 연결될 수 있다.
    - 아마도 postgresql을 설치 한 뒤 SSL을 이용해 클라이언트와 서버가 안전한 연결을 할 수 있다는 것이 보장 되어야 psycopg2-binary 라이브러리 설치가 가능한 것 같다.

위의 명령어들을 실행한 뒤 다시 psycopg2-binary를 설치하면 잘 설치 된다. 최신 버전으로 도 설치가 가능했다.


또다른 에러
이 과정을 다 거친 후에도 장고에서 migrate 실행시 CPython 관련한 에러가 발생했다. 해당 오류 내용은 여기에 있다. 검색하면 나오는 여러 방법들을 다 시도해 보았으나 해결 되지 않아 결국 미봉책으로 사용한 방법은 conda 환경을 구성하는 것이었다.
즉, conda를 install 하고 python3.9로 설정하고 해당 가상 환경에서 패키지 설치 후 migrate를 시도하니 해결 되었다. 기존에 사용하던 virtualenv를 그대로 이용하고 싶었지만 방법이 없었다.
정확한 원인을 파악하지는 못했지만 M1(Montrey) + python3.9에서 발생 가능한 이슈이다. 누군가 해결책을 안다면 공유해 주면 좋겠다.

profile
쿄쿄

0개의 댓글