मशीन-पठनीय प्रारूप में सिर्फ पैकेज संस्करण लौटाने वाला पायथन फ़ंक्शन:
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
एक और समस्या समान वातावरण में कुछ कोंडा-स्थापित पैकेजों की है। यदि वे आपके पाइप-इंस्टॉल किए गए पैकेजों के साथ निर्भरता साझा करते हैं, और इन निर्भरताओं के संस्करण भिन्न होते हैं, तो आप अपने पाइप-स्थापित निर्भरताओं के डाउनग्रेड प्राप्त कर सकते हैं।
उदाहरण के लिए, numpy
Py-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