Python

[Python] 패키지 버전 확인하기 with code

언킴 2023. 12. 27. 20:06
반응형

Contents

     

    파이썬 내에서 패키지의 버전을 확인하는 방법은 다양하다. 간단하게 pip를 사용해서 확인할 수도 있으나, 코드를 통해 확인할 수도 있다. CLI 에서도 확인하는 것이 가능하고, Jupyter Notebook에서도 확인이 가능하다. 이번 글에서는 버전을 확인할 수 있는 다양한 방법에 대해서 알아볼 것이다.

     

    pip list

    pip list는 파이썬에 설치된 패키지의 버전을 확인할 수 있는 가장 기본적인 코드라고 볼 수 있다. 단점은 설치된 패키지가 한 번에 나오기 때문에 찾는 것이 어렵다는 것이다. 

    # CLI
    pip list
    
    # Jupyter
    !pip list

     

     

    pip show

    하나의 패키지에 대한 버전을 확인하고 싶은 경우에는 pip list 대신 pip show를 사용해서 효율적으로 찾는 것이 가능하다. pip show는 단순히 하나만 찾아 볼 수 있는 것이 아니라, 입력한 패키지 수대로 검색할 수 있기 때문에 용이하게 사용된다.

    # CLI
    pip show numpy 
    pip show numpy pandas matplotlib
    
    # Jupyter
    !pip show numpy
    !pip show numpy pandas matplotlib

     

     

    그러나, 아래와 같이 License가 나오기 때문에 새로 창을 띄우거나 pip show를 한 패키지에 한해서 작성하는 것이 가독성이 좋다. 그렇다면, 특정 패키지의 버전만 딱딱 볼 수는 없을까? 직접 코드로 구현해보자.

     

    함수 구현

    기본적으로 파이썬 내에서 버전을 확인하는 코드는 __version__이다. 그리고 패키지의 이름을 확인하는 코드는 __name__이다. 이를 사용해서 코드를 짜보자.

    import types
    
    def version_check(names=None):
        if not names:
            raise TypeError('please input package name! for example, numpy, pandas, matplotlib, etc.')
    
        if isinstance(names, types.ModuleType):
            exec('print(f"{names.__name__} version is {names.__version__}")')
            
        elif isinstance(names, list) and all(isinstance(name, types.ModuleType ) for name in names):
            for name in names:
                exec('print(f"{name.__name__} version is {name.__version__}")')
        else:
            raise ValueError
            
            
            
    # Jupyter
    version_check(names=[np, pd, matplotlib])
    
    # numpy version is 1.26.0
    # pandas version is 2.1.4
    # matplotlib version is 3.8.2

     

    exec 함수를 사용하지 않고, print 구문으로 사용해도 된다. types라는 패키지에서는 type이 module인 경우를 확인할 수 있도록 하기 때문에 import 해서 사용하여야 한다. 간단한 구문을 통해 numpy, pandas, matplotlib에 대한 버전만 확인하는 것이 가능하다.