পাইথন ফাংশনটি মেশিন-পঠনযোগ্য ফর্ম্যাটে কেবল প্যাকেজ সংস্করণটি ফিরিয়ে দিচ্ছে:
from importlib.metadata import version
version('numpy')
অজগর 3.8 এর আগে:
pip install importlib-metadata
from importlib_metadata import version
version('numpy')
বাশের সমতুল্য (এখানে অজগর থেকেও আহবান করা হয়েছে) অনেক জটিল হবে (তবে আরও দৃ rob় - নীচে সাবধানতা দেখুন):
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
পিপিআই-তে 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