2011년 5월 24일 화요일

Homebrew로 갈아타기: iPython 삽질기

Macport 의 문제점(의존성이나 빌드가 안되는 것 들, sudo가 필수) 때문에 벼르고 있다가 결국 Homebrew로 갈아타는 무모한 도전을 하고 있는 중이다.

우선은 Macport(darwinport)를 지우고 Homebrew를 설치해야 하는데 찾다보니 갈아타기를 정리한 한글문서가 있어서 링크한다.

잘가 macports. 반갑습니다. homebrew.

Macrpot를 지우고 Homebrew를 설치하는 건 위 사이트의 내용대로 했다. 이 후 /usr/local/bin과 /usr/local/sbin의 경로를 세팅해 주는 것도 해 주고, /usr/local의 소유주를 내 계정으로 바꿨다. 자 이제 시험삼아 wget을 설치.
$ brew install wget
잘 된다. 다음 패키지 리스트를 한번 업데이트 해 주고...
$ brew update

Python을 설치한다. 2.7.1 버전이 있었다.
$ brew install python --framework
잘 된다.
$ brew install pip
알려진대로 easy_install로 설치하라는 경고가 나오고 설치가 중단된다. 그렇게 설치해보자.
$ easy_install pip

자 이제 또 하나의 시험. ipython을 설치한다.
$ pip install ipython
...
error: could not create '/System/Library/Frameworks/Python.framework/Versions/2.6/share': Permission denied
...
이런. 에러가 나온다. 저건 Homebrew로 설치한 곳이 아닌데 왜 저기다 설치하려는 걸까?

한참을 고민하다 혹시나 해서 PYTHONPATH를 새로 잡아줘봤다. ~/.bashrc파일을 열어서 다음 라인을 추가한 후 source ~/.bashrc로 적용했다.
export PYTHONPATH='/usr/local/lib/python2.7/site-packages'

다시 pip로 ipython 설치를 시도했지만 동일한 오류가 나왔다. 으악!!!!

또 한 참을 고민하다 위의 퍼미션 문제가 나는 곳에 뭔가 해답이 있나 싶어서 살펴보다가 Python.framework 밑에 Current라는 심볼릭링크가 있는 걸 발견하고 이 녀석을 Homebrew로 설치한 python의 것으로 바꾸어 주었다.
$ cd /System/Library/Frameworks/Python.framework/
$ sudo rm Current
$ sudo ln -s /usr/local/Cellar/python/2.7.1/Frameworks/Python.framework/Versions/Current Current

다시 pip로 ipython 설치 시도. 또 똑같은 에러다!!!! 악 악 악 악 악!! 으악! 빌어먹을!!

혹시나 해서 pip가 어떤 것으로 실행되고 있는지 파악해봤다.
$ which pip
/usr/local/bin/pip
pip 자체의 문제는 아닌 것 같은데...?? 그럼 easy_install이 범인일까?
$ which easy_install
/usr/bin/easy_install
헉! /usr/local 의 녀석이 아니다. 네녀석이 범인이구나! 그래서 easy_install을 Homebrew로 설치한 Python의 것으로 교체하기 위해 검색해봤다.
$ find /usr/local -name "easy_install"
/usr/local/share/python/easy_install
왠지 답이 나온 것 같았다. ~/.bashrc에 /usr/local/share/python을 /usr/bin 보다 먼저 오도록 설정하고 적용했다.

자 다시! easy_install pip을 실행시켰고... 이번에는 된다!!! 가 아니라 또 동일한 에러가 떴다. 영어의 F*CKING!!! 이라는 욕이 자연스럽게 나올 때도 있다는 것을 알게 되었다.

pip 공식문서에서 설정에 관한 부분을 찾아봤는데 전혀 도움이 되는 내용이 없었다.

원인을 뭘까 또 한참을 고민하다 '에라 모르겠다 pip 소스다 쳐다보자' 라고 생각해서 pip 실행 스크립트를 vi로 한번 열어봤다. vi /usr/local/bin/pip ...

소스를 천천히 살펴봤지만 흥미... 아니 설정으로 생각되는건 전혀 보이지 않았다. 그러다 첫 줄의 내용을 발견을 경악을 금치 못 했다.
#!/usr/bin/python
이번엔 영어의 S*CKS!!! 라는 욕과 일본어의 ちっくしょう! 라는 욕도 함께 나와줬다. 아하하. 아하하하하 아하하.

그랬다. pip가 OS X 의 기본 python을 호출해서 돌아가고 있었던 것이었다. 이 첫 줄을... env를 이용하도록 해도 되겠지만 하도 열이 받쳐서 그냥 Homebrew로 설치한 python으로 못 박아버렸다.
#!/usr/local/bin/python

하하. 이제 되겠지.
$ pip install ipython
된다! 되! 으하하하하하!!!!

ipython 설치하면서 미쳐가는 것 같다. 대략 5시간 정도 삽질한 것 같은데 정말 사람 피 말리는 줄 알았다. (Python 은 업무와 연관이 있다보니 -_-)



정리하자면, /usr/bin/python 을 직접 호출하는 스크립트가 있을 수 있으니 /usr/bin/python의 이름을 바꾸고 Homebrew로 설치한 python을 /usr/bin/python으로 링크시키는 것이 가장 명화한 해결책이 될 것 같다.

virtualenv 등을 활용하는게 더 나을 수도 있다. 하지만 내 경우 멀티버전 테스팅은 거의 필요없기 때문에 virtualenv 따윈 그냥 귀찮은 도구다. 히히...

댓글 없음 :