मशीन-पठनीय प्रारूप में सिर्फ पैकेज संस्करण लौटाने वाला पायथन फ़ंक्शन:
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
showपाइप में एक कमांड के लिए एक प्रस्ताव है : github.com/pypa/pip/issues/33