파이썬 모듈의 버전을 확인하는 방법?


687

난 그냥 파이썬 모듈을 설치 : constructstatlibsetuptools같은 :

# Install setuptools to be able to download the following
sudo apt-get install python-setuptools

# Install statlib for lightweight statistical tools
sudo easy_install statlib

# Install construct for packing/unpacking binary data
sudo easy_install construct

프로그래밍 방식으로 버전을 확인할 수 있기를 원합니다. python --version명령 줄에서 실행할 수 있는 것과 동등한 것이 있습니까?

내 파이썬 버전은 2.7.3입니다.




12
명령 행 솔루션에 관심이있는 사용자는 다음을 사용하십시오.pip list
KrisWebDev

답변:


730

easy_install 대신 pip를 사용하는 것이 좋습니다 . pip를 사용하면 설치된 모든 패키지와 해당 버전을

pip freeze

대부분의 리눅스 시스템에서 이것을 파이프 grep(또는 findstrWindows)로 파이프 하여 원하는 특정 패키지의 행을 찾을 수 있습니다.

Linux:
$ pip freeze | grep lxml
lxml==2.3

Windows:
c:\> pip freeze | findstr lxml
lxml==2.3

개별 모듈의 경우 __version__attribute를 시도 할 수 있지만없는 모듈이 있습니다.

$ python -c "import requests; print(requests.__version__)"
2.14.2
$ python -c "import lxml; print(lxml.__version__)"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
AttributeError: 'module' object has no attribute '__version__'

마지막으로 질문의 명령 앞에 접두사가 붙으면 sudo전역 파이썬 환경에 설치하는 것처럼 보입니다. python 가상 환경 관리자 (예 : virtualenvwrapper)를 살펴 보는 것이 좋습니다.


18
아래에 제안 된 답변 pip show lxml | grep Version; 단일 패키지 만 검사하므로 훨씬 빠르게 실행됩니다.
Jonathan Vanasco

12
완전성 : 세번째 버전은pip list | grep lxml
0xAffe

3
Windows 시스템에서는 어떻습니까? grep창문 은 무엇입니까 ? 핍 동결 이후 | grep lxml은 windwos에서 작동하지 않습니다.
Raven Cheuk

4
@RavenCheuk 사용pip list | findstr lxml
Alex F

2
find (1 자 더 짧은 ...)를 가진 Windows 변형 : pip list | "lxml"찾기
Jordan Stefanelli

368

당신은 시도 할 수 있습니다

>>> import statlib
>>> print statlib.__version__

>>> import construct
>>> print contruct.__version__

59
일부 공통 라이브러리 (예 :)의 일부 버전에는 불행히도 속성이 inspect없습니다 __version__.
ely

5
PySerial은 serial.VERSION. PEP 0396을 따르지 않는 일반적으로 사용되는 다른 모듈들도있을 수 있습니다 : python.org/dev/peps/pep-0396
Sussch

6
많은 모듈에는 버전
sdaffa23fdsf

1
@ sdaffa23fdsf 어떤 모듈에 버전이 없습니까? 직렬, 검사, PyQt 및 SQLite 이상입니까? pycmake를 참조하십시오 .
Pål GD

4
print(contruct.__version__)* 파이썬 3를 사용하는 경우
jacanterbury

218

라이브러리 pkg_resources와 함께 배포 된 모듈을 사용하십시오 setuptools. get_distribution메소드에 전달하는 문자열 은 PyPI 항목과 일치해야합니다.

>>> import pkg_resources
>>> pkg_resources.get_distribution("construct").version
'2.5.2'

명령 줄에서 실행하려면 다음을 수행하십시오.

python -c "import pkg_resources; print(pkg_resources.get_distribution('construct').version)"

get_distribution메소드에 전달하는 문자열은 가져 오려는 모듈 이름이 아니라 PyPI에 등록 된 패키지 이름이어야합니다.

불행히도 이것들은 항상 동일하지는 않습니다 (예를 들어 pip install memcached, import memcache).


20
모듈에 속성이없는 경우에도 작동합니다 __version__.
imranal

이건 어때? construct.version.full_version
MKatleast3

9
최고의 답변이어야합니다. 패키지 버전을받는 유일한 방법입니다 (있는 경우)
henryJack

7
참고 pkg_resources.get_distrinbution항상 중 하나가 작동하지 않습니다. DistributionNotFound" '_package_name'배포를 찾을 수없고 응용 프로그램에 필요합니다"와 같은 오류 메시지와 함께 일부 예외가 발생합니다.
mjv

3
@mjv 오류는 1) 패키지가 설치되지 않았기 때문에 발생합니다. 2) 패키지 이름 대신 모듈 이름을 get_distribution메소드에 전달합니다.
Jakub Kukul

96

이것이 도움이 될 수 있지만 먼저 show패키지를 설치 pip show한 다음 show를 사용하여 버전을 찾으십시오!

sudo pip install show
# in order to get package version execute the below command
sudo pip show YOUR_PACKAGE_NAME | grep Version

2
여기에 기쁨이 없습니다! pip: error: No command by the name pip show (maybe you meant "pip install show")
Sam Finnigan

이 답변은 쉘에서 패키지 버전이 필요한 경우에만 실제로 적합합니다. 파이썬 내에서 필요하다면 이것은 꽤 나쁜 해킹 일 것입니다. 어쨌든 다음 명령을 사용하여 버전을 추출 할 수 있습니다 pip show PACKAGE | awk '/^Version: / {sub("^Version: ", ""); print}'.. 더 간단한 AWK 스크립트를 사용하여 벗어날 수는 있지만 앞서 언급 한 내용은 모든 경우에 더 안전합니다.
Six

3
@SamFinnigan pip showpip 1.2.1.post1 에서 구현되었습니다 . 당신은 끔찍한 날짜의 pip 버전을 사용하고 있으므로 문제가 발생합니다. 현재 pip 7.1.2 실행 중 입니다. 무언가가 업데이트를 방해하는 경우 언제든지 로컬 또는 virtualenv에 설치할 수 있습니다.
Six

감사합니다. 일부 패키지에는 .__ version__ 매개 변수가 없으므로 더 유용합니다.
Salih Karagoz

출력에 불일치가있는 것 같습니다. >> print (sklearn .__ version__) # 0.20.3을 반환합니다. >> pip show sklearn #return 0.0; 당신은 명확히 할 수 있습니까?
Sumanth Lazarus

76

더 좋은 방법은 다음과 같습니다.


특정 패키지에 대한 자세한 내용

pip show <package_name>

Package_name, Version, Author, Location 등을 자세히 설명합니다.


$ pip show numpy
Name: numpy
Version: 1.13.3
Summary: NumPy: array processing for numbers, strings, records, and objects.
Home-page: http://www.numpy.org
Author: NumPy Developers
Author-email: numpy-discussion@python.org
License: BSD
Location: c:\users\prowinjvm\appdata\local\programs\python\python36\lib\site-packages
Requires:

자세한 사항은: >>> pip help


pip 이렇게하려면 업데이트해야합니다.

pip install --upgrade pip

Windows에서 권장되는 명령은 다음과 같습니다.

python -m pip install --upgrade pip


출력에 불일치가있는 것 같습니다. >> print (sklearn .__ version__) # 0.20.3을 반환합니다. >> pip show sklearn #return 0.0; 당신은 명확히 할 수 있습니까?
Sumanth Lazarus

1
pip show scikit-learn대신 사용해야 합니다 pip show sklearn. sklearn은 가져 오는 동안 사용되는 짧은 형식 입니다. 전체 패키지는 배우지 않기 pip때문에 직접 인식 할 scikit-learn수 없습니다sklearn
susan097

42

python3에서 인쇄 주위에 괄호가 있음

>>> import celery
>>> print(celery.__version__)
3.1.14

30
모든 패키지에 __version__속성 이있는 것은 아닙니다 .
Spedwards

이 답변은 다른 언어 인 파이썬 3에 대한 것입니다. 그러나 파이썬 2에서이 답변을 사용할 수 있습니다. 그렇게하려면 다른 문 앞에 " 미래의 import from print_function" 행을 추가해야 합니다.
user1976 년

1
@ user1976 이것은 파이썬 2에서도 유효한 구문입니다. 로 평가되는 print것처럼 괄호는 단순히 인수 주위에 허용 (2)+(3)됩니다 5. 괄호 안에 쉼표가 있으면 상황이 조금 더 흥미로워 질 수 있지만 print여전히 작동합니다.
tripleee

22

module.__version__ 시도하는 것이 가장 좋은 방법이지만 항상 작동하지는 않습니다.

껍질을 벗기고 싶지 않고 pip 8 또는 9를 사용 pip.get_installed_distributions()하는 경우 에도 Python 내에서 버전을 가져올 수 있습니다.

: 업데이트 솔루션은 여기 핍 8, 9에서 작동하지만, PIP (10)의 기능에서 이동되었습니다 pip.get_installed_distributionspip._internal.utils.misc.get_installed_distributions명시 적으로는 외부 사용을 위해 아니다 나타냅니다. pip 10+를 사용하는 경우 그것에 의존하는 것은 좋지 않습니다.

import pip

pip.get_installed_distributions()  # -> [distribute 0.6.16 (...), ...]

[
    pkg.key + ': ' + pkg.version
    for pkg in pip.get_installed_distributions()
    if pkg.key in ['setuptools', 'statlib', 'construct']
] # -> nicely filtered list of ['setuptools: 3.3', ...]

1
예, 모든 패키지 제작자가 version을 설정 하지는 않지만을 사용하는 경우 pip항상 작동합니다.
방수

2
불행히도이 솔루션은 실행 가능하지 않습니다. Pip은 프로세스 내 API를 보장하지 않으며 명령 줄을 통한 API 만 보장합니다. 이 방법은 더 이상 핍 (10)에 작동하지 않습니다
제이슨 R. 쿰즈에게

16

이전 답변으로 문제가 해결되지 않았지만이 코드는 다음을 수행했습니다.

import sys 
for name, module in sorted(sys.modules.items()): 
  if hasattr(module, '__version__'): 
    print name, module.__version__ 

2
__version__정의되지 않은 경우 인쇄를 시도 하지 않습니다. 이없는 경우 __version__원하는 패키지에 대한 결과가 없습니다.
tripleee

모듈 __version__에 표준 ( python.org/dev/peps/pep-0396/#specification ) 속성 이없는 경우 수동 조사없이 버전이 포함 된 위치와 방법을 알 수 없습니다.
tashuhka

12

이를 위해 importlib_metadata라이브러리를 사용할 수 있습니다 .

python 인 <3.8경우 먼저 다음을 사용하여 설치하십시오.

pip install importlib_metadata

파이썬부터는 3.8표준 라이브러리에 포함되어 있습니다.

그런 다음 패키지 버전을 확인하려면 (이 예제에서 lxml) 다음을 실행하십시오.

>>> from importlib_metadata import version
>>> version('lxml')
'4.3.1'

이는 PyPI에서 설치된 패키지에만 적용됩니다. 또한 version이 패키지가 제공하는 모듈 이름이 아니라 패키지 이름을 메소드 의 인수로 전달해야 합니다 (일반적으로 동일하지만).


12

dir()모듈에 __version__속성 이 있는지 확인하는 데 사용하십시오 .

>>> import selenium
>>> dir(selenium)
['__builtins__', '__doc__', '__file__', '__name__',
 '__package__', '__path__', '__version__']
>>> selenium.__version__
'3.141.0'
>>> selenium.__path__
['/venv/local/lib/python2.7/site-packages/selenium']

정확히 나는 셀레늄 버전을 찾았습니다. 마 법적으로 여기에 있습니다! Python3과 함께 작동하므로 잘하셨습니다!
pbaranski

이것은 강력한 솔루션에 가장 가까운 것입니다
D Adams

6

위의 방법이 작동하지 않으면 파이썬에서 다음을 시도해 볼 가치가 있습니다.

import modulename

modulename.version
modulename.version_info

Python Tornado 버전 다운로드를 참조 하십시오.

참고는이 .version뿐만 아니라 토네이도 외에 몇 가지 다른 나를 위해 일했다.


6

먼저 환경 변수에 python, pip를 추가하십시오. 명령 프롬프트에서 명령을 실행할 수 있습니다. 그런 다음 단순히 파이썬 명령을 내립니다. 그런 다음 패키지를 가져옵니다

->import scrapy

그런 다음 버전 이름을 인쇄하십시오

->print(scrapy.__version__)

이것은 확실히 작동합니다


2
여기에서 여러 번 설명한 것처럼 모든 모듈이 __version__속성을 제공하는 것은 아닙니다 .
reox

pip freeze그러나 <package> .__ version_ 과 함께 표시되지 않는 패키지를 찾았 습니다. 게시 해 주셔서 감사합니다.
Timothy C. Quinn

6

Jupyter Notebook을 사용한다고 가정합니다 (터미널을 사용하는 경우 느낌표를 삭제하십시오).

1) 패키지 (예 : xgboost)가 pip 와 함께 설치된 경우 :

!pip show xgboost
!pip freeze | grep xgboost
!pip list | grep xgboost

2) 패키지 (예 : caffe)가 conda 와 함께 설치된 경우 :

!conda list caffe

5

일부 모듈에는 __version__속성이 없으므로 가장 쉬운 방법은 터미널을 확인하는 것입니다.pip list


5

Python 3.8 버전에는 패키지에 새로운 metadata모듈 importlib이 있으며이를 수행 할 수도 있습니다.

다음은 문서의 예입니다.

>>> from importlib.metadata import version
>>> version('requests')
'2.22.0'

이 메소드는 버전 속성이 정의되지 않은 경우 작동하는 이점이 있습니다 .
Dereckson

3

python터미널 에서 쉘을 열고 (파이썬 버전에서 관심있는) 라이브러리를 가져오고 __version__속성을 얻는 것이 좋습니다.

>>> import statlib
>>> statlib.__version__

>>> import construct
>>> contruct.__version__

참고 1 : 파이썬 버전을 고려해야합니다 . 다른 버전의 파이썬을 설치했다면, 관심있는 파이썬 버전으로 터미널을 열어야합니다. 예를 들어, 캔으로 터미널을 열면 python3.8(또는 확실하게) python3.5또는로 여는 것과 다른 버전의 라이브러리를 제공합니다 python2.7.

2 주 : 우리는 사용하지 않는 print기능을 그 동작은 python2 또는 python3에 의존하기 때문에. 우리는 필요하지 않습니다. 터미널은 표현식의 값을 보여줍니다.


2

이것은 Windows의 Jupyter Notebook에서도 작동합니다! Jupyter가 Git Bash (MingW64)와 같은 bash 호환 명령 줄에서 시작되는 한, 많은 답변에 제공된 솔루션을 Windows 시스템의 Jupyter Notebook에서 한 번만 미세 조정할 수 있습니다.

Anaconda를 통해 설치된 Python으로 Windows 10 Pro를 실행하고 있으며 Git Bash를 통해 Jupyter를 시작할 때 다음 코드가 작동하지만 Anaconda 프롬프트에서 시작할 때는 작동하지 않습니다.

조정 : 느낌표 ( !)를 앞에 추가 pip하십시오 !pip.

>>>!pip show lxml | grep Version
Version: 4.1.0

>>>!pip freeze | grep lxml
lxml==4.1.0

>>>!pip list | grep lxml
lxml                               4.1.0                  

>>>!pip show lxml
Name: lxml
Version: 4.1.0
Summary: Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
Home-page: http://lxml.de/
Author: lxml dev team
Author-email: lxml-dev@lxml.de
License: BSD
Location: c:\users\karls\anaconda2\lib\site-packages
Requires: 
Required-by: jupyter-contrib-nbextensions

2

모든 패키지를 나열하는 빠른 Python 프로그램 ( requirements.txt에 복사 할 수 있음 )

from pip._internal.utils.misc import get_installed_distributions
print_log = ''
for module in sorted(get_installed_distributions(), key=lambda x: x.key): 
    print_log +=  module.key + '~=' + module.version  + '\n'
print(print_log)

결과는 다음과 같습니다.

asn1crypto~=0.24.0
attrs~=18.2.0
automat~=0.7.0
beautifulsoup4~=4.7.1
botocore~=1.12.98

2

( https://stackoverflow.com/a/56912280/7262247 참조 )

나는 그것이 매우 신뢰할 수없는 (최고의 하나를 포함하여 사용할 수있는 다양한 도구를 사용하는 것으로 pkg_resources언급 야쿱 Kukul '대답 으로) 그들의 대부분은 모든 경우에 적용되지 않습니다 . 예를 들어

  • 내장 모듈
  • 모듈은 설치되지 않았지만 파이썬 경로에 추가되었습니다 (예 : IDE에 의해)
  • 사용 가능한 동일한 모듈의 두 가지 버전 (하나는 설치된 하나를 대체하는 python 경로)

우리의 버전을 얻을 수있는 신뢰할 수있는 방법이 필요하기 때문에 어떤 패키지, 모듈 또는 서브 모듈을, 내가 쓰기 결국 하는 getVersion . 사용하는 것은 매우 간단합니다 :

from getversion import get_module_version
import foo
version, details = get_module_version(foo)

자세한 내용은 설명서 를 참조하십시오.


1

현재 모듈에서 가져온 비표준 (pip) 모듈 목록을 가져 오려면 :

[{pkg.key : pkg.version} for pkg in pip.get_installed_distributions() 
   if pkg.key in set(sys.modules) & set(globals())]

결과:

>>> import sys, pip, nltk, bs4
>>> [{pkg.key : pkg.version} for pkg in pip.get_installed_distributions() if pkg.key in set(sys.modules) & set(globals())]
[{'pip': '9.0.1'}, {'nltk': '3.2.1'}, {'bs4': '0.0.1'}]

노트 :

이 코드는이 페이지의 솔루션과 가져온 모듈을 나열하는 방법 에서 모두 정리되었습니다 .


1

요약하자면:

conda list   

(버전 세부 정보와 함께 모든 라이브러리를 제공합니다).

과:

pip show tensorflow

(전체 라이브러리 세부 사항을 제공합니다).


1

당신은 이것을 시도 할 수 있습니다 :

pip list

버전이있는 모든 패키지가 출력됩니다. 산출


0

바탕 야쿱 Kukul의 대답 나는이 문제를 해결하기 위해 더 신뢰할 수있는 방법을 발견했다.

이 접근법의 주요 문제점은 패키지를 "전통적으로"설치하고 (를 사용하지 않는 pip install --user) Python 초기화시 시스템 PATH에 있어야한다는 것입니다.

그 주위를 돌아 다니려면 사용할 수 있습니다 pkg_resources.find_distributions(path_to_search). 기본적으로 path_to_search시스템 PATH에있는 경우 가져올 수있는 분배를 검색합니다 .

다음과 같이이 생성기를 반복 할 수 있습니다.

avail_modules = {}
distros = pkg_resources.find_distributions(path_to_search)
for d in distros:
    avail_modules[d.key] = d.version

이것은 모듈을 키로하고 그 버전을 값으로 가진 사전을 반환합니다. 이 방법은 버전 번호보다 훨씬 더 확장 될 수 있습니다.

올바른 방향을 가리키는 Jakub Kukul에게 감사합니다.


0

Windows 사용자를 위해이 답변을 작성하십시오. 다른 모든 답변에서 제안했듯이 다음과 같이 진술을 사용할 수 있습니다.

import [type the module name]
print(module.__version__)      # module + '.' + double underscore + version + double underscore

그러나 위의 방법을 사용한 후에도 버전을 인쇄하지 않는 일부 모듈이 있습니다. 따라서 간단하게 할 수있는 것은 다음과 같습니다.

  1. 명령 프롬프트를여십시오.
  2. 파이썬과 모든 지원 모듈을 설치 한 cd [ file address ] 를 사용하여 파일 주소 / 디렉토리로 이동 하십시오.
  3. " pip install [module name] " 명령을 사용하고 Enter 키를 누르십시오.
  4. " 요구 사항이 이미 충족되었습니다 : 파일 주소 \ 폴더 이름 (버전 포함) " 이라는 메시지가 표시됩니다 .
  5. 예를 들어 아래 스크린 샷을 참조하십시오. "Selenium-Screenshot"이라는 사전 설치된 모듈의 버전을 알아야했습니다. 1.5.0으로 올바르게 표시되었습니다.

명령 프롬프트 스크린 샷


-1

먼저 이와 같은 패키지를 설치 한 다음 버전을 확인할 수 있습니다

pip install package
import package
print(package.__version__)

그것은 당신에게 패키지 버전을 제공해야합니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.