회사 프로젝트 때문에 npm으로 hiredis를 설치하는 도중 아래와 같은 에러를 만났다.
> hiredis@0.5.0 install /foo/bar/develop/project/node_modules/hiredis
> node-gyp rebuild
gyp ERR! configure error
gyp ERR! stack Error: Command failed: /foo/bar/.pyenv/shims/python2 -c import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack pyenv: python2: command not found
gyp ERR! stack
gyp ERR! stack The `python2' command exists in these Python versions:
gyp ERR! stack 2.7.14
npm으로 node.js 모듈을 설치하는데 왜 python 에러가 나는 것일까? 약간 미스터리 하지만 여러 언어를 섞어 쓰지 말란 법은 없다.
그런데 시스템에 설치된 python은 homebrew로 설치한 pyenv로 관리중이며 이미 2.7.14 버전을 기본 설정으로 사용하던 상황이었다. 따라서 일부러 python2 커맨드를 찾는 저 모듈(?)은 착오가 심한 것 같다는 느낌을 받았다. 참고로 python 2.x 버전은 이미 사형선고를 받은 상태라 더이상 쓰지 않는 게 좋겠는데... 아직도 쓰는 나도 정의로운 놈(?)은 아니다.
어쨌건 해결은 해야 할 것이다. 그리고 해답은 단순할 것 같았다. 사실 아래 처럼 그냥 python 실행파일의 링크로 python2를 하나 더 만들어 주면 된다.
$ ln -s /usr/local/bin/python /usr/local/bin/python2
이 커맨드는 python의 설치 경로에 따라 다르다. 그냥 예제일 뿐이다. 어차피 이게 해답이 아니기 때문에 굳이 시험해 볼 필요는 없고 그냥 글을 계속 읽어보자.
하지만 이렇게 해결하긴 싫었다
pyenv로 설치한 python을 사용 중인데 python2 파일 이름을 요구한다는 점은 어찌 보면 표준적이지 않다는 문제가 있다고도 볼 수 있다. 즉 대부분의 개발 머신에서 python 2.x.x 버전은 python2라는 엔트리 포인트를 가지고 있는 것이 대부분이라는 말이다. 그리고 나는 그게 없었다. 이 말은 내 컴퓨터가 비정상이라는 말이 될 수도 있다. 왠지 명확하게 해결을 하고 싶어 졌다.
다행히도 이 문제를 pyenv로 쉽게 해결하는 방법이 있어서 정리해본다.
사실 단순하다. pyenv를 이용해 python 2 버전과 3 버전을 다 설치하고 둘 다 기본으로 활성화시키면 된다.
$ pyenv install 2.7.14
$ pyenv install 3.7.3
$ pyenv global 3.7.3 2.7.14
마지막 라인이 핵심이다. global 커맨드는 전역 즉 기본 python을 어떤 버전으로 할 것인가를 고르는 것인데 두 가지 이상의 버전으로 설정하는 것도 가능하다. 그리고 두 가지 이상이라면 처음에 오는 것이 기본 버전이 된다.
결과적으로 위의 커맨드를 통해 기본 python 버전들을 설정하면 3.7.3 버전이 기본 python이 되고 2.7.14 버전은 python2 링크로 대체되어 생성된다. 그래서 python을 실행시키면 3.7.3 버전이 실행되고, python2를 실행시키면 2.7.14가 실행된다.
$ python --version
3.7.3
$ python2 --version
2.7.14
이렇게 하면 문제를 아주 엘레강스하게 해결할 수 있는 것 같다.
마무리
- 시스템에 설치된 기본 버전을 무시하고 굳이 2를 명시한 저 녀석(?)은 과연 정당한가?
- 아니면 굳이 2 버전이 죽어가는 마당에 2 버전대를 요구하는 저 녀석(?)이 나쁜 녀석(?)일까?
- 어차피 사형 선고받은 2 버전을 아직도 고정으로 박아놓은 건 죄가 될 수도 있을지도 모른다고 옆 치킨집 알바가 그랬다는 전설이 있다.
참고로 2.7 버전대를 왜 최신 버전이 아닌 2.7.14을 쓰느냐 하면 그냥 요구사항이 여기에 걸려있어서지 별 다른 이유가 있는 것은 아니다. 신경 쓰지 말자 :)
'기술적인 이야기 > 기타 개발' 카테고리의 다른 글
Python 3 정적 타이핑 소개 및 소감(?) (0) | 2020.02.13 |
---|---|
Python에 F-string 이라는 게 있었다? (0) | 2020.02.11 |
파이썬 코드 문법 검사기 flake8 (0) | 2020.01.29 |
파이썬의 새로운 의존성 관리자 Poetry (2) | 2020.01.07 |
Docker에서 macOS 호스트 포트에 접근하기 (267) | 2019.07.19 |
댓글