구글 코랩에서 하도 pip에서 종속성 에러가 발생하여 파이썬에서 종속성을 어떻게 관리하는지 찾아 보게되었다. pip에서는 의존성 트리를 형성하고 이를 통해서 패키지를 관리하게 된다. 또한 의존성 트리를 두는 것과는 별도로 pip내에 존재하는 패키지는 유일하며, 아래와 같은 형식으로 관리되고 있다. 잘 생각해보면 아마 pip는 패키지를 two level-cycle에 의해서 관리하고 이를 심볼릭을 사용해 호출하는 것 같다. 때문에 Acyclic이 발생하게 되면, 이를 삭제하지 못하며 남게된다. 이러한 단점을 보완하기 위해 pip에서는 주기적으로 너무 오래동안 안쓰는 패키지를 삭제하는 듯하다.

그리고 pip의 업데이트는 이러한 관리방법론에 대한 것들이나 네트워크 통신 속도 증강을 구현했을때마다 갱신한다.


arrow==1.2.0
  - python-dateutil [required: >=2.7.0, installed: 2.8.2]
    - six [required: >=1.5, installed: 1.16.0]
colorama==0.4.4
cryptography==35.0.0
  - cffi [required: >=1.12, installed: 1.14.6]
    - pycparser [required: Any, installed: 2.20]
Faker==9.3.1
  - python-dateutil [required: >=2.4, installed: 2.8.2]
    - six [required: >=1.5, installed: 1.16.0]
  - text-unidecode [required: ==1.3, installed: 1.3]
faker-airtravel==0.4
jupyterlab==3.1.18
  - ipython [required: Any, installed: 7.28.0]
    - backcall [required: Any, installed: 0.2.0]
    - decorator [required: Any, installed: 5.1.0]
    - jedi [required: >=0.16, installed: 0.18.0]
      - parso [required: >=0.8.0,<0.9.0, installed: 0.8.2]
    - matplotlib-inline [required: Any, installed: 0.1.3]
      - traitlets [required: Any, installed: 5.1.0]

스크린샷 2024-05-31 오후 11.19.21.png

requirements.txt

다들 알다시피 pip는 파이썬 패키지 매니저다. 주로 사용하는 커맨드는 아래의 3개일 것이다.

  1. $ pip install [package-name] : 패키지 설치하기
  2. $ pip install -r requirements.txt : 프로젝트의 모든 의존성 설치하기
  3. $ pip freeze > requirements.txt : 프로젝트의 모든 의존성 저장하기
  4. 그리고 pip의 의존성 트리를 쉽게 찾아보기 위해서 piptree라는 것이 존재한다.

따라서 pip를 사용할 시에 어떤 패키지가 어떤 버젼을 사용하는지 정확히 적어놓지 않게 될 경우 추후 패키지 업데이트시 내부 종속 dependency가 필연적으로 acyclic을 형성하며 꼬이게 되므로 반드시 requirement를 잘 작성해 두도록 한다.