파이선 패키지 관리자

연속해서 파이선 글이네요. 몇 일동안 파이선 패키지를 수없이 깔고 지웠습니다. 금방 끝날 것으로 생각해서 콘다 가상환경을 사용하지 않은 것이 오히려 어마어마한 삽질의 시작이었죠. 새로 알게된 내용이 있어서 정리합니다.

1. 패키지 설치 준비

파이선에서 패키지는 보통 pip 명령으로 설치합니다. 실은 여러가지 다른 대안들이 있습니다. 자세히 알고 싶으신 분은 (일본어)파이선 패키지 관리기술 설명을 참고하세요.

pip도 일종의 파이선 패키지이기 때문에 설치가 필요합니다. 이 또한 운영체제와 파이선 버전별로 차이가 있습니다. 자세한 설치 방법은 이곳을 참고하세요.

우분투에서 pip 설치

sudo apt-get install python-pip

CentOS에서 pip 설치

sudo yum install python-pip

2. 패키지 찾기

패키지 이름을 정확하게 알지 못하는 경우 pip search 기능을 이용합니다. pip search는 패키지 이름과 설명에 찾는 단어가 포함되어있는지 찾아서 결과를 알려줍니다.

$ pip search nodejs

하지만, 파이선의 패키지는 너무 많고 계속 늘어나고 있습니다. 그러다보니 nodejs 같은 파이선과 전혀 관계없어 보이는 키워드로도 관련된 패키지가 16개, mysql 관련된 패키지는 230개, django는 무려 5,959개의 결과가 검색됩니다.

효율적으로 검색하고 싶어도 pip search는 패키지 이름과 그 설명을 항상 동시에 검색하기 때문에 결과가 많습니다. 또한 정규식도 사용할 수 없습니다.

pip search와 함께 grep을 사용해서 불편함을 보완할 수 있습니다. 아래는 몇 가지 예 입니다.

# mysql로 시작하는 패키지 찾기
pip search mysql | grep -e "^mysql" 

# facebook 과 oauth 를 함께 포함하는 패키지 찾기
pip search django | grep -ie "facebook" | grep -ie "oauth"

3. 패키지 설치

패키지를 설치해봅시다.

패키지 이름을 아는 경우

패키지 이름을 아는 경우는 단순하게 pip install 패키지_이름 으로 설치합니다.

pip install click

git에서 설치하는 경우

특정 브랜치(branch)나 개발 중인 패키지를 설치하고 싶은 경우도 있습니다. 이때는 패키지 이름 데신에 git+를 깃헙 주소 앞에 붙여서 설치할 수 있습니다.

pip install git+https://github.com/pallets/click.git

로컬 디렉토리에서 설치하는 경우

내가 개발 중이거나 로컬에 존제하는 패키지도 설치할 수 있습니다. requests 패키지를 github에서 받아서 -e 옵션을 사용해서 설치해보겠습니다.

$ git clone https://github.com/kennethreitz/requests.git
$ pip install -e ./requests

4. 패키지 제거

패키지는 설치만큼 제거도 중요합니다. 기본은 pip uninstall 을 이용한 제거입니다.

패키지 제거

pip uninstall click

pip로 설치한 모든 패키지 삭제

가끔 패키지 버전이 꼬이거나 하면 모든 패키지를 삭제하고 싶은 충동이 일어나기도 합니다. 모든 패키지 목록은 pip freeze로 확인할 수 있습니다. 이를 이용해 다음처럼 모든 패키지를 삭제할 수 있습니다.

pip freeze | xargs pip uninstall 

하지만 위에서 설명한 requests의 경우는 아래와 같이 다른 패키지와는 다르게 표시됩니다.

...
pyzmq==16.0.2
qtconsole==4.3.0
-e git+https://github.com/kennethreitz/[email protected]#egg=requests
scandir==1.5
simplegeneric==0.8.1
...

-e로 시작하는 줄은 pip uninstall 이 이해할 수 없는 구문이기 때문에 오류가 발생합니다. 그렇다고 다른 방법이 있는 것도 아닙니다. 이는 -e 옵션은 editable의 의미로 실제 소스코드가 pip에서 관리하지 않는 곳에 있기 때문으로 생각됩니다.

직접 필요한 삭제해보겠습니다. 삭제 절차는 두 단계입니다. .egg-link 파일 삭제와 easy-install.pth 파일에서 해당 줄 삭제로 해결됩니다.

우선 패키지명.egg-link 파일을 찾아서 지웁니다.

$ cd $PYTHON_HOME/lib/python2.7/site-packages/
$ ls requests*
-rw-r--r--  1 kyryu  staff    27B  4 21 23:06 requests.egg-link
$ rm requests.egg-link

다음으로 원하는 텍스트 편집기로 같은 디렉토리에 있는 easy-install.pth 파일을 열어서 위에서 pip install -e /package/path 로 설치했던 /package/path에 해당하는 줄을 삭제 합니다.

5. 마무리

이번 글은 그리 깊이 있는 내용은 아니었지만, 막상 필요할 때 한번쯤 찾아야 하는 내용이라고 생각해서 적어봤습니다.