파이썬 버전을 업데이트 하며 마주친 에러 공유
오늘 파이썬 버전 3.8.1 -> 3.9.9로 업데이트 하면서 마주한 에러를 리포트 한다.
파이썬은 현재 버전 3.10.4까지 release 되었다. zappa를 사용해 lambda로 서버를 실행하는 우리 서비스는 람다가, 혹은 자파가 지원하는 파이썬 버전에 민감할 수밖에 없다. 현재 zappa는 파이썬 버전 3.9.9까지 지원되기 때문에 우리 서비스는 파이썬 버전 3.9.9까지 업데이트를 하기로 했다.
문제는 맥북 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"
위의 명령어들을 실행한 뒤 다시 psycopg2-binary를 설치하면 잘 설치 된다. 최신 버전으로 도 설치가 가능했다.
또다른 에러
이 과정을 다 거친 후에도 장고에서 migrate 실행시 CPython 관련한 에러가 발생했다. 해당 오류 내용은 여기에 있다. 검색하면 나오는 여러 방법들을 다 시도해 보았으나 해결 되지 않아 결국 미봉책으로 사용한 방법은 conda 환경을 구성하는 것이었다.
즉, conda를 install 하고 python3.9로 설정하고 해당 가상 환경에서 패키지 설치 후 migrate를 시도하니 해결 되었다. 기존에 사용하던 virtualenv를 그대로 이용하고 싶었지만 방법이 없었다.
정확한 원인을 파악하지는 못했지만 M1(Montrey) + python3.9에서 발생 가능한 이슈이다. 누군가 해결책을 안다면 공유해 주면 좋겠다.