아래 명령은 설치된 모든 패키지를 upgrade합니다.

$ pip install --upgrade $(pip list | egrep -v 'Pack|----' | awk '{print $1}')

아래 명령은 pip, wheel, setuptools를 제외한 패키지를 모두 제거합니다.

$ pip uninstall $(pip list | egrep -v 'Pack|----|pip|wheel|setuptools')

'Python 계열 > Python 레거시 글' 카테고리의 다른 글

귀찮음을 줄여주는 간단한 pip 관련 명령 모음(Draft)  (0) 2018.11.12
requirements.txt로 협업 상황에서의 의존성 관리하기  (0) 2018.11.07
pip  (0) 2018.11.05
__slots__  (0) 2018.11.03
Context Manager  (0) 2018.11.01
Argument Unpacking  (0) 2018.10.30

requirements.txt는 npm의 packages.json과 유사하게, 의존성의 목록을 관리하는 Python의 관례적인 파일입니다. 다수의 개발자가 Python으로 프로젝트를 진행하는 경우, 개발 시 필요한 의존성 패키지들을 동일하게 맞추고 개발하는 것이 좋습니다. Python은 requirements.txt라는 개념을 통해 이를 해결합니다.

pip freeze

pip freeze라는 명령이 있습니다. pip list처럼 시스템에 설치된 파이썬 패키지의 목록을 출력하는데, freeze의 경우 이 목록을 raw하게 표현한다는 특징이 있습니다.

$ pip3 freeze
pbr==4.0.4
six==1.11.0
stevedore==1.28.0
virtualenv==16.0.0
virtualenv-clone==0.3.0
virtualenvwrapper==4.8.2

이전에 pip install을 하면서, 특정 버전의 패키지를 설치할 때 사용했던 표현과 동일합니다. 따라서 최초 개발자 A는 pip freeze 명령어의 결과를 외부 파일로 export해 의존성 목록을 만들 수 있습니다.

$ pip3 freeze > requirements.txt

requirements.txt 파일 내에는 다음과 같이 개발 시 필요한 패키지들이 저장됩니다.

$ cat requirements.txt
pbr==4.0.4
six==1.11.0
stevedore==1.28.0
virtualenv==16.0.0
virtualenv-clone==0.3.0
virtualenvwrapper==4.8.2

파일 이름은 아무렇게나 해도 상관 없으나, 관례 상 위처럼 requirements.txt를 사용하는 것이 좋습니다.

pip install -r [filename]

pip install 명령에는 전달할 수 있는 많은 인자들이 존재하지만, --upgrade와 이 -r 인자를 가장 많이 사용할 것입니다. pip install 뒤에 -r을 붙이고, 의존성 목록이 적혀 있는 파일의 경로를 입력하면 적혀 있는 그대로 패키지들이 설치됩니다.

$ pip3 install -r requirements.txt
Collecting pbr==4.0.4 (from -r requirements.txt (line 1))
https://files.pythonhosted.org/packages/b3/5d/c196041ffdf3e34ba206db6d61d1f893a75e1f3435699ade9bd65e089a3d/pbr-4.0.4-py2.py3-none-any.whl
Collecting six==1.11.0 (from -r requirements.txt (line 2))
https://files.pythonhosted.org/packages/67/4b/141a581104b1f6397bfa78ac9d43d8ad29a7ca43ea90a2d863fe3056e86a/six-1.11.0-py2.py3-none-any.whl
Collecting stevedore==1.28.0 (from -r requirements.txt (line 3))
https://files.pythonhosted.org/packages/17/6b/3b7d6d08b2ab3e5ef09e01c9f7b3b590ee135f289bb94553419e40922c25/stevedore-1.28.0-py2.py3-none-any.whl

(...)

Installing collected packages: pbr, six, stevedore, virtualenv, virtualenv-clone, virtualenvwrapper
Successfully installed pbr-4.0.4 six-1.11.0 stevedore-1.28.0 virtualenv-16.0.0 virtualenv-clone-0.3.0 virtualenvwrapper-4.8.2


'Python 계열 > Python 레거시 글' 카테고리의 다른 글

귀찮음을 줄여주는 간단한 pip 관련 명령 모음(Draft)  (0) 2018.11.12
requirements.txt로 협업 상황에서의 의존성 관리하기  (0) 2018.11.07
pip  (0) 2018.11.05
__slots__  (0) 2018.11.03
Context Manager  (0) 2018.11.01
Argument Unpacking  (0) 2018.10.30

좀 잘 나가는 프로그래밍 언어라면, 패키지(라이브러리) 생태계가 굉장히 활발하게 형성되어 있습니다. 그 대표격으로 JavaScript 진영의 npm이 있고, 이와 유사한 패키지 생태계로 Python에는 PyPI(Python Package Index)가 있습니다. 그리고 이들은 pip를 이용해 관리할 수 있습니다. pip를 이용해 외부 라이브러리를 설치하면, 파이썬이 설치된 경로의 site-packages 디렉토리에 적용되어 즉시 사용할 수 있게 됩니다. 별도의 의존성 있는 모듈이나 패키지도 함께 설치해 주기 때문에 매우 편리합니다.

Linux 기반 운영체제에서 pythonpython3 명령이 별도로 존재하는 것처럼, pippip3 명령도 별도로 존재합니다. 각각 python2에 대한 라이브러리, python3에 대한 라이브러리를 관리합니다. pip --version 또는 pip -V를 통해 설치되어 있는 pip의 버전을 확인할 수 있습니다.

$ pip -V
pip 10.0.1 from /usr/local/lib/python2.7/site-packages/pip (python 2.7)
$ pip3 --version
pip 10.0.1 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)

pip install [packages ...]

PyPI에서 packages에 해당하는 패키지들을 가져와 설치합니다. 아래의 명령은 virtualenvwrapper를 설치합니다.

$ pip3 install virtualenvwrapper
Collecting virtualenvwrapper
  Downloading https://files.pythonhosted.org/packages/2b/8c/3192e10913ad945c0f0fcb17e9b2679434a28ad58ee31ce0104cba3b1154/virtualenvwrapper-4.8.2-py2.py3-none-any.whl

(...)

https://files.pythonhosted.org/packages/b3/5d/c196041ffdf3e34ba206db6d61d1f893a75e1f3435699ade9bd65e089a3d/pbr-4.0.4-py2.py3-none-any.whl (98kB)
    100% |████████████████████████████████| 102kB 2.1MB/s
Installing collected packages: six, pbr, stevedore, virtualenv-clone, virtualenvwrapper
Successfully installed pbr-4.0.4 six-1.11.0 stevedore-1.28.0 virtualenv-clone-0.3.0 virtualenvwrapper-4.8.2

여러 개의 패키지들을 한 번에 설치할 수도 있으며, 이미 존재하는 패키지인 경우 'Requirement already satisfied'라는 결과가 보여집니다. 아래의 명령은 시스템에 이미 설치되어 있는 virtualenv와 virtualenvwrapper를 설치합니다.

$ pip3 install virtualenv virtualenvwrapper
Requirement already satisfied: virtualenv in /usr/local/lib/python3.6/site-packages (16.0.0)
Requirement already satisfied: virtualenvwrapper in /usr/local/lib/python3.6/site-packages (4.8.2)
Requirement already satisfied: stevedore in /usr/local/lib/python3.6/site-packages (from virtualenvwrapper) (1.28.0)
Requirement already satisfied: virtualenv-clone in /usr/local/lib/python3.6/site-packages (from virtualenvwrapper) (0.3.0)
Requirement already satisfied: six>=1.10.0 in /usr/local/lib/python3.6/site-packages (from stevedore->virtualenvwrapper) (1.11.0)
Requirement already satisfied: pbr!=2.1.0,>=2.0.0 in /usr/local/lib/python3.6/site-packages (from stevedore->virtualenvwrapper) (4.0.4)

다음과 같이 특정 버전의 패키지를 설치할 수도 있습니다. 아래의 명령은 virtualenvwrapper의 4.7 버전을 설치합니다.

$ pip3 install virtualenvwrapper==4.7
Collecting virtualenvwrapper==4.7
  Downloading 

(...)

Installing collected packages: virtualenvwrapper
Successfully installed virtualenvwrapper-4.7.0

pip list

pip list는 pip에 의해, 또는 수동으로 설치되어 있는 패키지들의 목록을 출력합니다.

$ pip3 list
Package           Version
----------------- -------
pbr               4.0.4
pip               10.0.1
setuptools        39.0.1
virtualenv        16.0.0

(...)

wheel             0.31.0

pip install --upgrade [packages ...]

packages에 해당하는 패키지들을 시스템에서 찾아, 설치되어 있으면 최신 버전으로 업그레이드하고, 그렇지 않으면 pip install을 진행합니다. 패키지가 이미 최신 버전으로 설치되어 있다면, 'Requirement already up-to-date'라는 결과가 보여집니다. 아래는 최신 버전인 virtualenv최신 버전이 아닌 virtualenvwrapper를 업그레이드하는 명령입니다.

$ pip3 install --upgrade virtualenv virtualenvwrapper
Requirement already up-to-date: virtualenv in /usr/local/lib/python3.6/site-packages (16.0.0)

(...)

Installing collected packages: virtualenvwrapper
  Found existing installation: virtualenvwrapper 4.7.0
    Uninstalling virtualenvwrapper-4.7.0:
      Successfully uninstalled virtualenvwrapper-4.7.0
Successfully installed virtualenvwrapper-4.8.2

pip uninstall [packages ...]

packages에 해당하는 패키지들을 시스템에서 제거합니다. 시스템에 존재하지 않는 패키지일 경우, 'Skipping *** as it is not installed.'라는 결과가 보여집니다. 아래는 설치되어 있는 jinja2와 markupsafe, 설치되어 있지 않은 flask를 제거하는 명령입니다.

$ pip3 uninstall jinja2 markupsafe flask
Uninstalling Jinja2-2.10:
  Would remove:
    /usr/local/lib/python3.6/site-packages/Jinja2-2.10.dist-info/*
    /usr/local/lib/python3.6/site-packages/jinja2/*
Proceed (y/n)? y
  Successfully uninstalled Jinja2-2.10
Uninstalling MarkupSafe-1.0:
  Would remove:
    /usr/local/lib/python3.6/site-packages/MarkupSafe-1.0.dist-info/*
    /usr/local/lib/python3.6/site-packages/markupsafe/*
Proceed (y/n)? y
  Successfully uninstalled MarkupSafe-1.0
Skipping flask as it is not installed.


'Python 계열 > Python 레거시 글' 카테고리의 다른 글

귀찮음을 줄여주는 간단한 pip 관련 명령 모음(Draft)  (0) 2018.11.12
requirements.txt로 협업 상황에서의 의존성 관리하기  (0) 2018.11.07
pip  (0) 2018.11.05
__slots__  (0) 2018.11.03
Context Manager  (0) 2018.11.01
Argument Unpacking  (0) 2018.10.30

+ Recent posts