pip와 함께 설치된 패키지 버전 찾기


708

pip를 사용하여 현재 설치된 버전의 패키지를 알아낼 수 있습니까?

나는 알고 pip install XYZ --upgrade있지만 같은 것이 있는지 궁금합니다 pip info XYZ. 그렇지 않다면 현재 사용중인 버전을 알려주는 가장 좋은 방법은 무엇입니까?


4
showpip에 명령에 대한 제안이 있습니다 : github.com/pypa/pip/issues/33
Hugo Tavares

답변:


1013

현재 핍 1.3 하는이 pip show명령.

$ pip show Jinja2
---
Name: Jinja2
Version: 2.7.3
Location: /path/to/virtualenv/lib/python2.7/site-packages
Requires: markupsafe

이전 버전에서, pip freeze그리고 grep멋지게 일을해야한다.

$ pip freeze | grep Jinja2
Jinja2==2.7.3

8
@techtonik : 현재 모듈 을 requirements.txt로 고정하기위한 것입니다.
휴고

@ Hugo : 나는 save이름을 사용 합니다.
anatoly techtonik

5
'동결'이라는 이름은 역사적 으로 적어도 2008 년으로 거슬러 올라갑니다 . 당시 많은 사람들이 이미 "얼어 붙은"루비 보석에 익숙했기 때문에 핍은 당시 널리 사용 된 이름을 빌 렸습니다.
AdamKG

2
이것은 명확하지 않거나 문서화되지 않았지만 예상했던 것 pip show pip보다 pip의 버전 정보를 얻기 위해 입력 할 수 있습니다 pip --version.
Marc Maxmeister

pip freeze편집 가능한 VCS 체크 아웃 버전을 올바르게 표시하지만 pip show그렇지 않은 장점이 있습니다 .
spookylukey

63

휴고 타바레스 (Hugo Tavares)는 다음과 같이 개선 된 pip로 pull 요청을 보냈습니다.

(예 : specloud)

$ pip show specloud

Package: specloud
Version: 0.4.4
Requires:
nose
figleaf
pinocchio

2
이미 병합 된 것 같습니다 .
anatoly techtonik

43

Pip 1.3에는 이제 list 명령이 있습니다.

$ pip list
argparse (1.2.1)
pip (1.5.1)
setuptools (2.1)
wsgiref (0.1.2)

패키지 이름이 X라고 가정하십시오. 버전을 찾으려면-pip list 사용과 X 가져 오기 및 X .__ version__ 가져 오기의 차이점은 무엇입니까? 패키지 버전이 모두 있습니까?
변수

둘 다 유효하지만 pip list일반적 __version__이며 그렇지 않습니다. 또한 본 version()get_version()하나를 가져옵니다.
RickyA

35

추가 인수로 --outdated를 사용하면 사용중인 패키지의 현재 및 최신 버전을 얻을 수 있습니다.

$ pip list --outdated
distribute (Current: 0.6.34 Latest: 0.7.3)
django-bootstrap3 (Current: 1.1.0 Latest: 4.3.0)
Django (Current: 1.5.4 Latest: 1.6.4)
Jinja2 (Current: 2.6 Latest: 2.8)

따라서 AdamKG의 답변과 결합 :

$ pip list --outdated | grep Jinja2
Jinja2 (Current: 2.6 Latest: 2.8)

pip-tools 도 확인하십시오 : https://github.com/nvie/pip-tools


1
흥미로운 옵션입니다. 차라리 그들 모두를 나열하고 구식이 있는지 알려주십시오.
ArtOfWarfare

17

당신은 또한 좋은 출력을 제공 설치 yolk하고 실행할 수 있습니다 yolk -l. 여기 내 작은 virtualenv에 대해 얻는 것이 있습니다.

(venv)CWD> /space/vhosts/pyramid.xcode.com/venv/build/unittest 
project@pyramid 43> yolk -l
Chameleon       - 2.8.2        - active 
Jinja2          - 2.6          - active 
Mako            - 0.7.0        - active 
MarkupSafe      - 0.15         - active 
PasteDeploy     - 1.5.0        - active 
Pygments        - 1.5          - active 
Python          - 2.7.3        - active development (/usr/lib/python2.7/lib-dynload)
SQLAlchemy      - 0.7.6        - active 
WebOb           - 1.2b3        - active 
account         - 0.0          - active development (/space/vhosts/pyramid.xcode.com/project/account)
distribute      - 0.6.19       - active 
egenix-mx-base  - 3.2.3        - active 
ipython         - 0.12         - active 
logilab-astng   - 0.23.1       - active 
logilab-common  - 0.57.1       - active 
nose            - 1.1.2        - active 
pbkdf2          - 1.3          - active 
pip             - 1.0.2        - active 
pyScss          - 1.1.3        - active 
pycrypto        - 2.5          - active 
pylint          - 0.25.1       - active 
pyramid-debugtoolbar - 1.0.1        - active 
pyramid-tm      - 0.4          - active 
pyramid         - 1.3          - active 
repoze.lru      - 0.5          - active 
simplejson      - 2.5.0        - active 
transaction     - 1.2.0        - active 
translationstring - 1.1          - active 
venusian        - 1.0a3        - active 
waitress        - 0.8.1        - active 
wsgiref         - 0.1.2        - active development (/usr/lib/python2.7)
yolk            - 0.4.3        - active 
zope.deprecation - 3.5.1        - active 
zope.interface  - 3.8.0        - active 
zope.sqlalchemy - 0.7          - active 

9

grep 명령을 사용하여 찾을 수 있습니다.

pip show <package_name>|grep Version

예:

pip show urllib3|grep Version

버전 만 표시됩니다.

메타 데이터 버전 : 2.0
버전 : 1.12


8

가장 쉬운 방법은 다음과 같습니다.

import jinja2
print jinja2.__version__

7
__version__소스 코드에 정의 된 패키지에만 적용됩니다 . 많은 패키지는 그렇지 않습니다.
spookylukey

패키징하는 동안이 버전을 포함하는 것이 좋은 방법입니까 아니면 setup.py 파일 버전 매개 변수에 버전 만있는 것이 좋습니다?
변수

이 방법은 또한 예상 입력 import과 출력 사이의 이름 불일치 (최소 3 가지 유형)를 패키지화하는 데 강력하지 않습니다 pip freeze.
mirekphd 2014

6

도구도있다 라고 pip-check하면 설치된 모든 패키지와 업데이트 상태를 간략히 :

여기에 이미지 설명을 입력하십시오

직접 사용하지 않았습니다. 방금 그것 과이 SO 질문을 연속적으로 우연히 발견했으며 언급되지 않았기 때문에 ...


Windows에서 이것을 실행하는 방법
vela

1
@vela Windows에서 정확히 동일하게 작동 할 것으로 기대합니다. 물론 모든 시스템에서와 같이 먼저 설치해야 합니다.
Ola Tuvesson

5

Windows에서는 다음과 같은 명령을 실행할 수 있습니다.

pip show setuptools | findstr "Version"

산출:

Version: 34.1.1

2

python 함수는 기계가 읽을 수있는 형식으로 패키지 버전 만 반환합니다.

from importlib.metadata import version 
version('numpy')

파이썬 3.8 이전 :

pip install importlib-metadata 
from importlib_metadata import version
version('numpy')

bash에 상응하는 (여기서는 파이썬에서 호출) 훨씬 더 복잡하지만 (보다 강력합니다-아래주의 참조)

import subprocess
def get_installed_ver(pkg_name):
    bash_str="pip freeze | grep -w %s= | awk -F '==' {'print $2'} | tr -d '\n'" %(pkg_name)
    return(subprocess.check_output(bash_str, shell=True).decode())

샘플 사용법 :

# pkg_name="xgboost"
# pkg_name="Flask"
# pkg_name="Flask-Caching"
pkg_name="scikit-learn"

print(get_installed_ver(pkg_name))
>>> 0.22

참고이 두 경우 모두 pkg_name에 의해 반환되는 형식으로 패키지 이름을 포함해야 매개 변수 pip freeze와 같은 동안 사용하지 import, 예를 들어 scikit-learn하지 sklearnFlask-Caching하지 flask_caching.

pip freezebash 버전 을 호출하는 것은 비효율적 인 것처럼 보일 수 있지만이 방법만이 패키지 이름 지정 특성 및 불일치 (예 : 밑줄 대 대시, 작은 대 대문자 및 sklearnvs 와 같은 약어)를 패키지화하는 데 충분히 강력하다는 것을 알 수 있습니다 scikit-learn.

주의 : 복잡한 환경에서는 두 가지 변형 모두 실제로 얻을 수있는 것과 일치하지 않는 놀라운 버전 번호를 반환 할 수 있습니다. import .

사용자 site-packages 하위 폴더 에 다른 버전의 패키지가 숨겨져있는 경우 이러한 문제가 발생합니다 . version()여기 에 사용하는 위험에 대한 그림으로 내가 만난 상황이 있습니다.

$ pip freeze | grep lightgbm
lightgbm==2.3.1

and

$ python -c "import lightgbm; print(lightgbm.__version__)"
2.3.1

vs.

$ python -c "from importlib_metadata import version; print(version(\"lightgbm\"))"
2.2.3

until you delete the subfolder with the old version (here 2.2.3) from the user folder (only one would normally be preserved by `pip` - the one installed as last with the `--user` switch):

$ ls /home/jovyan/.local/lib/python3.7/site-packages/lightgbm*
/home/jovyan/.local/lib/python3.7/site-packages/lightgbm-2.2.3.dist-info
/home/jovyan/.local/lib/python3.7/site-packages/lightgbm-2.3.1.dist-info

또 다른 문제점은 동일한 환경에 일부 conda 설치 패키지가 있다는 것입니다. 이들이 pip 설치 패키지와 종속성을 공유하고 이러한 종속성 버전이 다른 경우 pip 설치 종속성의 다운 그레이드가 발생할 수 있습니다.

예를 들어 numpy04-01-2020의 PyPI에서 사용 가능한 최신 버전 은 1.18.0이며 동시에 Anaconda의 conda-forge채널은 numpy최신 버전으로 1.17.3 버전 만 사용했습니다 . 따라서 basemapconda (두 번째)로 패키지 를 설치하면 이전에 설치된 pip가 설치된 numpyconda에 의해 1.17.3으로 다운 그레이드되고 버전 1.18.0은이 import기능을 사용할 수 없게됩니다 . 이 경우 version()권리, 그리고 것 pip freeze/ conda list잘못 :

$ python -c "from importlib_metadata import version; print(version(\"numpy\"))"
1.17.3

$ python -c "import numpy; print(numpy.__version__)"
1.17.3

$ pip freeze | grep numpy
numpy==1.18.0

$ conda list | grep numpy
numpy                     1.18.0                   pypi_0    pypi

1
왜 사용하지 importlib.metadata.version('NameOfProject')않습니까? docs.python.org/3/library/…
sinoroc

1
위대한 @sinoroc를 찾아라! 난 당신이 대답으로 게시해야한다고 생각하고, 나는 오히려 overengineered 하나를 삭제합니다 :) 샘플의 PoC : from importlib_metadata import version; version('Flask-Caching')
mirekphd

1
내가 보내 줄게
sinoroc

최신 편집 내용이 저를 놀라게합니다. 당신은 시도 할 수 python -c "import pkg_resources; print(pkg_resources.get_distribution('lightgbm').version)"있습니까?
sinoroc

version()가장 오래된 (가장 오래된) 버전 (2.2.3)을 반환 할 때 최신 버전 (2.3.1)이 정답 입니다. --user스위치를 사용하여 두 버전을 모두 설치 하지만 수동으로 lightgbm-2.2.3.dist-info폴더를 보존하여 위에 나열된 것처럼 두 버전을 함께 사용하면이 결과를 복제 할 수 있습니다 (pip는 일반적으로 제거하지 않을 때까지 제거합니다).
mirekphd

1

pip show는 Python 3.7에서 작동합니다.

pip show selenium
Name: selenium
Version: 4.0.0a3
Summary: Python bindings for Selenium
Home-page: https://github.com/SeleniumHQ/selenium/
Author: UNKNOWN
Author-email: UNKNOWN
License: Apache 2.0
Location: c:\python3.7\lib\site-packages\selenium-4.0.0a3-py3.7.egg
Requires: urllib3
Required-by:

표준 답변이 아닙니다.
hamed baziyad

1

파이썬 코드를 사용하여이를 수행하려면 :

사용 importlib.metadata.version

파이썬 ≥3.8

import importlib.metadata
importlib.metadata.version('beautifulsoup4')
'4.9.1'

파이썬 ≤3.7

(사용 importlib_metadata.version)

!pip install importlib-metadata

import importlib_metadata
importlib_metadata.version('beautifulsoup4')
'4.9.1'

사용 pkg_resources.Distribution

import pkg_resources
pkg_resources.get_distribution('beautifulsoup4').version
'4.9.1'
pkg_resources.get_distribution('beautifulsoup4').parsed_version
<Version('4.9.1')>

sinorocmirekphd의 의견에 감사 합니다.


맞습니다. 두 답변의 조합이 아마도 지역 사회에 가장 좋을 것입니다. 당신은 더 간결하고 한 번도 강타하기 위해 탈출하지 않았으므로 아마도 a pip install와 밑줄을 필요로하는 레거시 파이썬 버전에 대한 정보로 자신을 향상시킬 수 있습니다 . 내에서 그대로 복사하거나 일관성 numpybeautifulsoup4위해 변경 할 수 있습니다.
mirekphd

0

Windows의 경우

  1. cmd를 열고 python을 입력하고 Enter 키를 누릅니다.

  2. 가져 오기를 입력하고 Enter를 누르십시오.

  3. ._version__을 입력하고 Enter를 누르십시오.

스크린 샷에서 볼 수 있듯이 직렬 모듈의 버전을 확인하기 위해이 방법을 사용하고 있습니다.

영상



0

문제는 어떤 OS 사용자가 사용하고 있는지 언급되지 않았습니다 (Windows / Linux / Mac)

Mac과 Linux에서 완벽하게 작동하는 몇 가지 답변이 있습니다.

사용자가 Windows에서 파이썬 패키지의 버전을 찾으려고 할 때 아래 명령을 사용할 수 있습니다.

PowerShell에서 아래 명령을 사용하십시오.

pip list | findstr <PackageName>

예:- pip list | findstr requests

출력 : requests 2.18.4

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