::: IT인터넷 :::

파이썬 라이브러리 의존성 확인하기

곰탱이푸우 2022. 8. 25. 08:20
파이썬으로 프로그램을 작성하다보면 설치 된 패키지의 버전 충돌 여부를 확인해야 할 필요가 있다.
특히 파이썬의 경우 다양한 라이브러리를 설치해서 사용하기 때문에 라이브러리간의 의존성 확인이 중요하다.
 
이럴때 pipdeptree 라이브러리를 사용하면 쉽게 확인할 수 있다.
설치 된 라이브러리들의 버전 정보 뿐 아니라, 각 라이브러리와 연결 된 다른 라이브러리 정보 확인도 가능하다.
그리고 JSON이나 Tree 형태로 출력할 수 있어 정보 관리에도 편리하다.
 
공식 사이트는 다음과 같다.
 
 
MIT 라이선스이기 때문에 편하게 사용하면 된다.
해당 라이선스의 자세한 내용은 아래 문서를 참고한다.

pipdeptree  설치

pip로 간단하게 설치할 수 있다.
$ pip install pipdeptree

 

2022년 5월 16일 현재 2.2.1 버전이 최신이다.
 
pip 환경 설정은 아래 포스팅의 pip 클라이언트 설정 부분을 참고한다.
아나콘다를 이용하여 개발을 위한 가상 환경을 사용하고자 하는 경우 아래 포스팅을 참고한다.

의존성 확인하기

전체 의존성 확인

설치 된 전체 패키지의 의존성을 확인하기 위해서는 아래와 같이 실행한다.
$ pipdeptree
 
실행하면 아래와 같이 설치 된 라이브러리들의 의존성 정보와 버전 정보가 출력된다.
$ pipdeptree
graphviz==0.20
minio==7.1.8
  - certifi [required: Any, installed: 2021.10.8]
  - urllib3 [required: Any, installed: 1.26.9]
pipdeptree==2.2.1
  - pip [required: >=6.0.0, installed: 22.1]
psycopg2-binary==2.9.3
pymongo==4.1.1
setuptools==62.2.0
wheel==0.37.1

 

 

특정 패키지 의존성 확인

특정 패키지의 연관성 정보를 출력하려면 아래와 같이 실행한다.
$ pipdeptree -p 패키지명1,패키지명2,...
 
-p는 패키지명을 특정하겠다고 전달하는 인자이다.
패키지명을 기입할 때 콤마(,) 다음에 공백이 입력되면 출력되지 않는다.
$ pipdeptree -p psycopg2-binary, pymongo, minio
usage: pipdeptree [-h] [-v] [-f] [--python PYTHON] [-a] [-l] [-u] [-w [{silence,suppress,fail}]] 
                  [-r] [-p PACKAGES] [-e PACKAGES] [-j] [--json-tree]
                  [--graph-output OUTPUT_FORMAT]
pipdeptree: error: unrecognized arguments: pymongo, minio

 

아래와 같이 공백이 없어야 한다.
$ pipdeptree -p psycopg2-binary,pymongo,minio
minio==7.1.8
  - certifi [required: Any, installed: 2021.10.8]
  - urllib3 [required: Any, installed: 1.26.9]
psycopg2-binary==2.9.3
pymongo==4.1.1
 

역방향으로 의존성 확인

-r 옵션을 지정하면 역방향으로 출력할 수 있다.
의존성 트리의 가장 마지막 단계의 라이브러리를 지정하면 아래와 같이 출력된다.
$ pipdeptree -r -p defusedxml
defusedxml==0.7.1
  - python3-openid==3.2.0 [requires: defusedxml]
    - apache-airflow==2.2.3 [requires: python3-openid~=3.2]
    - Flask-OpenID==1.3.0 [requires: python3-openid>=2.0]
      - Flask-AppBuilder==3.4.5 [requires: Flask-OpenID>=1.2.5,<2]
        - apache-airflow==2.2.3 [requires: flask-appbuilder>=3.3.2,<4.0.0]

 

역방향으로 탐색하면서 해당 라이브러리를 사용하는 의존성 목록을 확인할 수 있다.
 
 

결과 확인하기

JSON

표준 출력
--json 옵션을 사용하면 JSON 포맷으로 출력할 수 있다.
$ pipdeptree -r -p urllib3  --json
[
    {
        "package": {
            "key": "minio",
            "package_name": "minio",
            "installed_version": "7.1.8",
            "required_version": "==7.1.8"
        },
        "dependencies": []
    },
    {
        "package": {
            "key": "urllib3",
            "package_name": "urllib3",
            "installed_version": "1.26.9",
            "required_version": null
        },
        "dependencies": [
            {
                "key": "minio",
                "package_name": "minio",
                "installed_version": "7.1.8"
            }
        ]
    }
]
 
파일 저장
파일로 저장하기 위해서는 표준 출력을 파일로 저장하는 > 명령을 사용하면 된다.
$ pipdeptree -r -p urllib3  --json > urllib3_dep.json
$ cat urllib3_dep.json
[
    {
        "package": {
            "key": "minio",
            "package_name": "minio",
            "installed_version": "7.1.8",
            "required_version": "==7.1.8"
        },
        "dependencies": []
    },
    {
        "package": {
            "key": "urllib3",
            "package_name": "urllib3",
            "installed_version": "1.26.9",
            "required_version": null
        },
        "dependencies": [
            {
                "key": "minio",
                "package_name": "minio",
                "installed_version": "7.1.8"
            }
        ]
    }
]
 
 

그래프로 출력하기

라이브러리의 의존성을 그림 파일로 출력할 수 있다.
 
--grpah-output 옵션을 사용한다. 지원하는 포맷은 dot, jpeg, pdf, png, svg 이다.
pipdeptree의 도움말을 확인해보면 다음과 같이 확인된다.
$ pipdeptree --help
... 생략 ...
  --graph-output OUTPUT_FORMAT
        Print a dependency graph in the specified output format. 
        Available are all formats supported by GraphViz, 
        e.g.: dot, jpeg, pdf, png, svg
 
텍스트로 출력되는 것보다는 그림으로 확인하는 것이 가시성 확보에 도움이 된다.
설치 된 라이브러리가 너무 많으면 보기가 어렵다는 단점이 있다.
따라서 앞에서 다룬 방법을 활용하여 필터링을 하고 그림으로 출력하는 것을 추천한다.
  • 대상 패키지 의존성 확인
  • 역방향으로 의존성 확인

 

graphviz 라이브러리 설치

graphviz 라이브러리가 설치되어 있어야 한다. 설치되지 않으면 다음과 같은 오류가 발생한다.
$ pipdeptree -p psycopg2-binary,pymongo,minio --graph-output png > dependency.png
graphviz is not available, but necessary for the output option. Please install it.
 
graphviz는 pip 명령으로 설치 가능하다.
$ pip install graphviz
 
자세한 사용법은 아래 사이트를 참고한다.
그림 파일로 저장하기
해당 라이브러리를 설치하면 정상적으로 그림 파일이 생성된다.
파일로 저장하기 위해서 파일로 저장하는 > 명령을 사용해야 한다.
$ pipdeptree -p psycopg2-binary,pymongo,minio --graph-output png > dependency.png
 
그림 파일을 확인하면 다음과 같이 그림 파일로 확인된다.