खोजें कि कौन सा संस्करण पाइप के साथ स्थापित है


710

पाइप का उपयोग करना, क्या यह पता लगाना संभव है कि वर्तमान में किस पैकेज का संस्करण स्थापित किया गया है?

मुझे पता है pip install XYZ --upgradeलेकिन मैं सोच रहा हूं कि क्या ऐसा कुछ है pip info XYZ। यदि नहीं, तो यह बताने का सबसे अच्छा तरीका क्या होगा कि मैं वर्तमान में किस संस्करण का उपयोग कर रहा हूं।


4
showपाइप में एक कमांड के लिए एक प्रस्ताव है : github.com/pypa/pip/issues/33
ह्यूगो तवरेज

जवाबों:


1014

पाइप 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: यह एक मौजूदा आवश्यकताओं के लिए मौजूदा मॉड्यूल ठंड के लिए है ।
ह्यूगो

@ ह्यूगो: मैं saveनाम का उपयोग करूँगा ।
अनातोली टेकटोनिक

5
'फ्रीज' का नामकरण ऐतिहासिक है - यह कम से कम 2008 तक है । उस समय, कई लोग पहले से ही "फ्रीजिंग" रूबी रत्नों से परिचित थे, इसलिए पाइप ने तत्कालीन व्यापक रूप से इस्तेमाल किया नाम उधार लिया था।
एडमकेजी

2
यह स्पष्ट नहीं था और न ही प्रलेखित किया गया था, लेकिन आप pip show pipपाइप के संस्करण की जानकारी प्राप्त करने के लिए टाइप कर सकते हैं , बजाए इसके pip --versionकि मैंने अपेक्षा की है।
मार्क मैक्समिस्टर

pip freezeइसका फायदा यह है कि यह संपादन योग्य VCS चेकआउट संस्करणों को सही ढंग से दिखाता है, जबकि pip showऐसा नहीं करता है।
spookylukey

63

मैंने अभी वृद्धि के साथ पाइप में एक पुल अनुरोध भेजा है ह्यूगो तवारेस ने कहा:

(उदाहरण के तौर पर देखें)

$ pip show specloud

Package: specloud
Version: 0.4.4
Requires:
nose
figleaf
pinocchio

2
ऐसा लगता है कि यह पहले से ही विलय हो गया है।
अनातोली टेकटोनिक

43

पिप 1.3 पर अब एक सूची कमांड भी है :

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

पैकेज का नाम कहें X. संस्करण को खोजने के लिए - पाइप सूची का उपयोग करने और X को आयात करने और फिर X .__ संस्करण__ में क्या अंतर है? क्या दोनों पैकेज संस्करण हैं?
चर

दोनों मान्य हैं, लेकिन pip listसामान्य है, और __version__नहीं है। मैंने भी देखा है version()और get_version()आयातित एक के लिए।
रिकी

35

और - अतिरिक्त तर्क के रूप में, आपको आपके द्वारा उपयोग किए जा रहे पैकेजों के वर्तमान और नवीनतम संस्करण मिलेंगे:

$ 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)

तो एडमकेजी के उत्तर के साथ संयोजन:

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

पाइप-उपकरण भी जांचें : 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

क्या पैकेजिंग करते समय इस संस्करण को शामिल करना अच्छा है या केवल सेटअपहोम फ़ाइल संस्करण पैरामीटर में संस्करण के लिए अच्छा अभ्यास है?
चर

यह विधि भी नामांकित विसंगतियों के पैकेज के लिए मजबूत नहीं है (और कम से कम 3 प्रकार हैं) के अपेक्षित इनपुट importऔर आउटपुट के बीच pip freeze
mirekphd

6

वहाँ भी एक उपकरण है कहा जाता है pip-checkजो आप सभी इंस्टॉल किए गए पैकेज और उनके अद्यतन स्थिति का एक त्वरित अवलोकन देता है:

यहां छवि विवरण दर्ज करें

खुद इसका इस्तेमाल नहीं किया; बस उस पर और इस एसओ जल्दी सवाल में ठोकर खाई, और क्योंकि यह उल्लेख नहीं किया गया था ...


इसे विंडोज पर कैसे चलाया जाए
vela

1
@ मुझे उम्मीद है कि यह विंडोज पर बिल्कुल वैसा ही काम करेगा। बेशक आपको इसे पहले स्थापित करना होगा, जैसा कि आप किसी भी सिस्टम पर करेंगे।
बजे ओला तुवेसन

5

खिड़कियों पर, आप आदेश जारी कर सकते हैं जैसे:

pip show setuptools | findstr "Version"

आउटपुट:

Version: 34.1.1

2

मशीन-पठनीय प्रारूप में सिर्फ पैकेज संस्करण लौटाने वाला पायथन फ़ंक्शन:

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

अजगर 3.8 से पहले:

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

बैश समतुल्य (यहाँ अजगर से भी आमंत्रित) अधिक जटिल होगा (लेकिन अधिक मजबूत - नीचे सावधानी देखें):

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नहीं sklearnया Flask-Cachingनहीं flask_caching

ध्यान दें कि pip freezeबैश संस्करण में इनवॉइस करना अकुशल लग सकता है, केवल यह विधि पैकेज के नामकरण की विसंगतियों और विसंगतियों (जैसे अंडरस्कोर बनाम डैश, छोटे बनाम बड़े कैप, और संक्षिप्त रूप sklearnबनाम 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

एक और समस्या समान वातावरण में कुछ कोंडा-स्थापित पैकेजों की है। यदि वे आपके पाइप-इंस्टॉल किए गए पैकेजों के साथ निर्भरता साझा करते हैं, और इन निर्भरताओं के संस्करण भिन्न होते हैं, तो आप अपने पाइप-स्थापित निर्भरताओं के डाउनग्रेड प्राप्त कर सकते हैं।

उदाहरण के लिए, numpyPy-01 में 04-01-2020 पर उपलब्ध नवीनतम संस्करण 1.18.0 था, जबकि उसी समय एनाकोंडा के conda-forgeचैनल पर numpyउनका नवीनतम संस्करण केवल 1.17.3 था । इसलिए जब आप basemapकोंडा के साथ एक पैकेज स्थापित करते हैं (दूसरे के रूप में), तो आपके पहले से स्थापित numpyपाइप 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! मुझे लगता है कि आपको इसे एक उत्तर के रूप में पोस्ट करना चाहिए, और मैं अपने बजाय एक को खत्म कर दूंगा :) नमूना PoC:from importlib_metadata import version; version('Flask-Caching')
mirekphd

1
मैं आपको इसके लिए जाने दूँगा
sinoroc

आपके नए संपादन मुझे आश्चर्यचकित करते हैं। क्या आप कोशिश कर सकते हैं python -c "import pkg_resources; print(pkg_resources.get_distribution('lightgbm').version)"?
सिनोरोक

वह आपको सही उत्तर देता है - नवीनतम संस्करण स्थापित किया गया (2.3.1), जब वह version()अभी भी सबसे पुराना (सबसे पुराना) एक (2.2.3) लौटाता है। आप --userस्विच के साथ दोनों संस्करणों को स्थापित करके इस परिणाम को दोहरा सकते हैं , लेकिन मैन्युअल रूप से lightgbm-2.2.3.dist-infoफ़ोल्डर को संरक्षित करना , दोनों को एक साथ रखना, जैसा कि ऊपर सूचीबद्ध है (पाइप सामान्य रूप से इसे हटा देगा - जब तक यह नहीं होता)।
मिरकफैड

1

पाइप शो पाइथन 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:

यह मानक उत्तर नहीं है।
हमीद

1

पायथन कोड का उपयोग करके ऐसा करने के लिए:

का उपयोग करते हुए importlib.metadata.version

पायथन th3.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')>

सिनोरोक और मिर्क्फद द्वारा टिप्पणियों का श्रेय ।


0

विंडोज के लिए आप कर सकते हैं

  1. cmd खोलें और अजगर टाइप करें, एंटर दबाएँ।

  2. आयात टाइप करें और एंटर दबाएँ।

  3. type ._version__ और एंटर दबाएँ।

जैसा कि आप स्क्रीन शॉट में देख सकते हैं मैं इस पद्धति का उपयोग सीरियल मॉड्यूल के संस्करण की जांच के लिए कर रहा हूं।

छवि



0

प्रश्न में, यह उल्लेख नहीं किया गया है कि कौन सा ओएस उपयोगकर्ता उपयोग कर रहा है (विंडोज / लिनक्स / मैक)

के रूप में वहाँ जवाब है जो मैक और लिनक्स पर निर्दोष काम करेंगे के कुछ जोड़े हैं।

यदि उपयोगकर्ता विंडोज़ पर अजगर पैकेज के संस्करण को खोजने की कोशिश कर रहा है, तो नीचे कमांड का उपयोग किया जा सकता है।

PowerShell में कमांड के नीचे उपयोग करें:

pip list | findstr <PackageName>

उदाहरण:- pip list | findstr requests

आउटपुट: requests 2.18.4

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.