# 파이선 패키지 관리자
연속해서 파이선 글이네요. 몇 일동안 파이선 패키지를 수없이 깔고 지웠습니다. 금방 끝날 것으로 생각해서 콘다 가상환경을 사용하지 않은 것이 오히려 어마어마한 삽질의 시작이었죠. 새로 알게된 내용이 있어서 정리합니다.
# 1. 패키지 설치 준비
파이선에서 패키지는 보통 pip
명령으로 설치합니다. 실은 여러가지 다른 대안들이 있습니다. 자세히 알고 싶으신 분은 (일본어)파이선 패키지 관리기술 설명 (opens new window)을 참고하세요.
pip
도 일종의 파이선 패키지이기 때문에 설치가 필요합니다. 이 또한 운영체제와 파이선 버전별로 차이가 있습니다.
자세한 설치 방법은 이곳 (opens new window)을 참고하세요.
# 우분투에서 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/requests.git@f6c58ec5820e29c1214c8e3ff887f571c32ffd48#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. 마무리
이번 글은 그리 깊이 있는 내용은 아니었지만, 막상 필요할 때 한번쯤 찾아야 하는 내용이라고 생각해서 적어봤습니다.