পাইথন ইন্টারপ্রেটারের কোন সংস্করণটি আমার স্ক্রিপ্টটির ব্যাখ্যা দিচ্ছে তা আমি কীভাবে পরীক্ষা করতে পারি?
python_version = int(str(range(3))[-2])
পাইথন ইন্টারপ্রেটারের কোন সংস্করণটি আমার স্ক্রিপ্টটির ব্যাখ্যা দিচ্ছে তা আমি কীভাবে পরীক্ষা করতে পারি?
python_version = int(str(range(3))[-2])
উত্তর:
এই তথ্যটি সিস মডিউলে সায়স.ভারশন স্ট্রিংয়ে উপলব্ধ is
>>> import sys
মানব পাঠযোগ্য:
>>> print(sys.version) # parentheses necessary in python 3.
2.5.2 (r252:60911, Jul 31 2008, 17:28:52)
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)]
আরও প্রক্রিয়াজাতকরণের জন্য:
>>> sys.version_info
(2, 5, 2, 'final', 0)
# or
>>> sys.hexversion
34014192
পাইথন ইন্টারপ্রেটারের ন্যূনতম সংস্করণের প্রয়োজনীয়তার সাথে কোনও স্ক্রিপ্ট চলছে তা নিশ্চিত করার জন্য এটি আপনার কোডে যুক্ত করুন:
assert sys.version_info >= (2, 5)
এটি বড় এবং গৌণ সংস্করণের তথ্যের তুলনা করে। মাইক্রো (= যোগ করুন 0
, 1
, ইত্যাদি) এবং এমনকি releaselevel (= 'alpha'
, 'final'
তোমার মত যেমন tuple করতে, ইত্যাদি)। তবে খেয়াল করুন যে কোনও নির্দিষ্ট বৈশিষ্ট্য আছে কিনা তা "হাঁস" পরীক্ষা করা প্রায় সবসময়ই ভাল, এবং যদি না হয়, তবে কার্যনির্বাহী (বা জামিন দেওয়া)। কখনও কখনও বৈশিষ্ট্যগুলি অন্যের দ্বারা প্রতিস্থাপিত হয়ে নতুন রিলিজে চলে যায়।
PY3 = sys.version_info[0] == 3
sys.version_info
বৈশিষ্ট্য হিসাবে কিছু ক্ষেত্র অ্যাক্সেস করতে পারেন , তাই PY3 = sys.version_info.major == 3
কিছুটা আকর্ষণীয় হতে পারে।
if sys.version_info >= (3,)
। এটি বিভিন্ন আকারের টিপলগুলির তুলনা করা সম্পূর্ণ অজগর এবং এটি সঠিক কাজ করবে।
আমি sys.hexversion
এই জাতীয় জিনিস পছন্দ করি ।
http://docs.python.org/library/sys.html#sys.hexversion
>>> import sys
>>> sys.hexversion
33883376
>>> '%x' % sys.hexversion
'20504f0'
>>> sys.hexversion < 0x02060000
True
(2,6,4)
'final'
আপনার সেরা বাজি সম্ভবত এরকম কিছু:
>>> import sys
>>> sys.version_info
(2, 6, 4, 'final', 0)
>>> if not sys.version_info[:2] == (2, 6):
... print "Error, I need python 2.6"
... else:
... from my_module import twoPointSixCode
>>>
অতিরিক্তভাবে, আপনি সর্বদা আপনার আমদানিকে একটি সাধারণ চেষ্টাতে মোড়াতে পারেন, যা সিনট্যাক্স ত্রুটিগুলি ধরা উচিত। এবং, হাইকির বক্তব্য, এই কোডটি পাইথনের অনেক পুরানো সংস্করণের সাথে সামঞ্জস্য করবে:
>>> try:
... from my_module import twoPointSixCode
... except Exception:
... print "can't import, probably because your python is too old!"
>>>
except Exception
খুব বিস্তৃত। আপনি যে নির্দিষ্ট ব্যতিক্রম প্রত্যাশা করেছেন তা ব্যবহার করা কি ভাল হবে না?
except Exception:
নিজে লাইন ইতিমধ্যে একটি আধুনিক (2.x + +) পাইথন অনুমান। সম্ভবত কিছু ভবিষ্যত অজগর কিছু ব্যাকগ্রাউন্ড-বেমানান উপায়ে ব্যতিক্রমের নামগুলি পুনরায় সাজিয়ে তুলবে? (সম্ভবত না, তবে কে জানে যে 20 বছরে পাইথন দেখতে কেমন হবে যখন আমাদের সকলের মধ্যে অকুলাস ফাটল চোখের বলের ইমপ্লান্ট রয়েছে? কোডটি দীর্ঘ সময় ধরে থাকে))
ব্যবহারের platform
'spython_version
stdlib থেকে:
>>> from platform import python_version
>>> print(python_version())
2.7.8
কিছু রাখুন:
#!/usr/bin/env/python
import sys
if sys.version_info<(2,6,0):
sys.stderr.write("You need python 2.6 or later to run this script\n")
exit(1)
আপনার স্ক্রিপ্ট শীর্ষে।
মনে রাখবেন যে আপনার স্ক্রিপ্টে আর কি রয়েছে তার উপর নির্ভর করে লক্ষ্য থেকে অজগরের পুরানো সংস্করণগুলি স্ক্রিপ্টটি লোড করতে সক্ষম নাও হতে পারে, সুতরাং এই ত্রুটিটি রিপোর্ট করার মতো যথেষ্ট পরিমাণে পাবেন না। কার্যকারণ হিসাবে, আপনি উপরেরটি কোনও স্ক্রিপ্টে চালাতে পারেন যা আরও আধুনিক কোড সহ স্ক্রিপ্ট আমদানি করে।
x if Pred() else y
। তারা "লেক্সিং" পর্যায়ে মারা যাবে এবং বাস্তবে মৃত্যুদন্ড কার্যকর করার সুযোগ কখনই পাবে না exit(1)
। শেঠের উত্তরটি অন্য ফাইলগুলিতে নতুন ভাষার বৈশিষ্ট্যগুলিকে আবদ্ধ করতে সঠিক।
else
শাখা বা একটি <
ব্যবহার করা হয় version_info
? আফাইক পাইথন প্যাডগুলি টিউপসগুলিতে মূল্যবোধ হারিয়েছে এবং এই সমস্তগুলি 2.6 এর আগে বৈধ হওয়া উচিত, না? সুতরাং শেঠের উত্তরটি স্লাইসিং ব্যবহার করে (অতিরিক্তভাবে) যখন এটি উত্তর দেয় না এবং এটি আপনার মন্তব্যকে আরও বিভ্রান্ত করে তোলে।
এখানে একটি সংক্ষিপ্ত কমান্ডলাইন সংস্করণ যা সরাসরি সাথে সাথে প্রস্থান করা হয় (স্ক্রিপ্ট এবং স্বয়ংক্রিয় প্রয়োগের জন্য সহজ):
python -c "print(__import__('sys').version)"
বা কেবল প্রধান, গৌণ এবং মাইক্রো:
python -c "print(__import__('sys').version_info[:1])" # (2,)
python -c "print(__import__('sys').version_info[:2])" # (2, 7)
python -c "print(__import__('sys').version_info[:3])" # (2, 7, 6)
python2 --version
এবং আউটপুট ক্যাপচারের মাধ্যমে সংস্করণ নম্বরটি python3 --version
পেয়েছিলাম। যদিও আমি সমস্যাগুলি ছাড়াই passthru()
উত্তরটি পেতাম, প্রাক্তনটি কেবল তখন স্ক্রিনে মুদ্রণ করত তবে কোনও ফাইলের মধ্যে পুনঃনির্দেশিত হওয়া সত্ত্বেও কখনই ধরা পড়ত না ...
print()
যদি কোনও ফাইলের কাছে বেশি সুবিধাজনক হন তবে লিখতে বলতে পারেন।
passthru()
একটি ফাইলে আউটপুট পুনর্নির্দেশ করছি । আপনার সমাধানটি আমার যা প্রয়োজন ঠিক তা করে। :)
আপনার টার্মিনালে কেবল পাইথন টাইপ করুন এবং নীচের মত সংস্করণটি দেখতে পাবেন
desktop:~$ python
Python 2.7.6 (default, Jun 22 2015, 18:00:18)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
শেঠ যেমন বলেছিলেন, মূল স্ক্রিপ্ট চেক করতে পারে sys.version_info
(তবে নোট করুন যে এটি ২.০ অবধি প্রকাশিত হয়নি, সুতরাং আপনি যদি পুরানো সংস্করণগুলি সমর্থন করতে চান তবে আপনাকে সিএস মডিউলের অন্য সংস্করণ সম্পত্তিটি পরীক্ষা করতে হবে)।
তবে আপনাকে এখনও পুরানো পাইথন সংস্করণগুলিতে উপলব্ধ ফাইলগুলিতে পাইথন ভাষার কোনও বৈশিষ্ট্য না ব্যবহারের যত্ন নিতে হবে। উদাহরণস্বরূপ, পাইথন 2.5 এবং এর পরে এটি অনুমোদিত:
try:
pass
except:
pass
finally:
pass
তবে পুরানো পাইথন সংস্করণগুলিতে কাজ করবে না, কারণ আপনি কেবল ওআর ব্যতীত শেষ পর্যন্ত চেষ্টাটি মেলাতে পারেন। তাই পুরানো পাইথন সংস্করণগুলির সাথে সামঞ্জস্যের জন্য আপনাকে লিখতে হবে:
try:
try:
pass
except:
pass
finally:
pass
বেশ কয়েকটি উত্তর ইতিমধ্যে প্রস্তাব দেয় কীভাবে বর্তমান অজগর সংস্করণটি অনুসন্ধান করা যায় suggest প্রোগ্রামগতভাবে সংস্করণের প্রয়োজনীয়তাগুলি পরীক্ষা করতে , আমি নিম্নলিখিত দুটি পদ্ধতির একটি ব্যবহার করব:
# Method 1: (see krawyoti's answer)
import sys
assert(sys.version_info >= (2,6))
# Method 2:
import platform
from distutils.version import StrictVersion
assert(StrictVersion(platform.python_version()) >= "2.6")
কেবল মজাদার জন্য, সিপিথন ১.০-৩. P বি 2, পাইপি, জাইথন এবং মাইক্রোপাইথনে এটি করার একটি উপায় নিম্নলিখিত। এটি আধুনিক কোডে করার পদ্ধতির চেয়ে কৌতূহল বেশি। আমি এটি http://stromberg.dnsalias.org/~strombrg/pythons/ এর অংশ হিসাবে লিখেছি , যা পাইথনের বহু সংস্করণে একবারে কোডের স্নিপেট পরীক্ষার জন্য একটি স্ক্রিপ্ট, যাতে অজগরটি কীসের জন্য আপনি সহজেই অনুভূতি পেতে পারেন বৈশিষ্ট্যগুলি পাইথনের কি সংস্করণগুলির সাথে সামঞ্জস্যপূর্ণ:
via_platform = 0
check_sys = 0
via_sys_version_info = 0
via_sys_version = 0
test_sys = 0
try:
import platform
except (ImportError, NameError):
# We have no platform module - try to get the info via the sys module
check_sys = 1
if not check_sys:
if hasattr(platform, "python_version"):
via_platform = 1
else:
check_sys = 1
if check_sys:
try:
import sys
test_sys = 1
except (ImportError, NameError):
# just let via_sys_version_info and via_sys_version remain False - we have no sys module
pass
if test_sys:
if hasattr(sys, "version_info"):
via_sys_version_info = 1
elif hasattr(sys, "version"):
via_sys_version = 1
else:
# just let via_sys remain False
pass
if via_platform:
# This gives pretty good info, but is not available in older interpreters. Also, micropython has a
# platform module that does not really contain anything.
print(platform.python_version())
elif via_sys_version_info:
# This is compatible with some older interpreters, but does not give quite as much info.
print("%s.%s.%s" % sys.version_info[:3])
elif via_sys_version:
import string
# This is compatible with some older interpreters, but does not give quite as much info.
verbose_version = sys.version
version_list = string.split(verbose_version)
print(version_list[0])
else:
print("unknown")
পাইথন সংস্করণ পরীক্ষা করুন: python -V
বা python --version
বাapt-cache policy python
আপনি whereis python
কত সংস্করণ ইনস্টল করা আছে তা দেখতে চালাতে পারেন।
... আপনি (আব) তালিকা বোঝার স্কোপিং পরিবর্তনগুলি ব্যবহার করতে পারেন এবং এটি একটি একক অভিব্যক্তিতে করতে পারেন :
is_python_3_or_above = (lambda x: [x for x in [False]] and None or x)(True)
উইন্ডোজ কমান্ডের জন্য পাইথন সংস্করণটি যাচাই করতে, কমান্ড প্রম্পটে নিম্নলিখিত কমান্ডগুলি চালনা করুন এবং আউটপুট যাচাই করুন
c:\>python -V
Python 2.7.16
c:\>py -2 -V
Python 2.7.16
c:\>py -3 -V
Python 3.7.3
এছাড়াও, প্রতিটি পাইথন সংস্করণের ফোল্ডার কনফিগারেশন দেখতে, নিম্নলিখিত কমান্ডগুলি চালনা করুন:
For Python 2,'py -2 -m site'
For Python 3,'py -3 -m site'
from sys import version_info, api_version, version, hexversion
print(f"sys.version: {version}")
print(f"sys.api_version: {api_version}")
print(f"sys.version_info: {version_info}")
print(f"sys.hexversion: {hexversion}")
আউটপুট
sys.version: 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] sys.api_version: 1013 sys.version_info: sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0) sys.hexversion: 50726384
print("sys.version: {}".format(version))
।
sys.version_info
tuple
3.7 এর হিসাবে কোনও হিসাবে ফিরে আসবে বলে মনে হচ্ছে না । পরিবর্তে, এটি একটি বিশেষ শ্রেণীর ফেরত দেয়, তাই টিপলস ব্যবহার করে সমস্ত উদাহরণ ব্যবহার করে না, আমার পক্ষে কমপক্ষে। পাইথন কনসোল থেকে প্রাপ্ত ফলাফল এখানে:
>>> import sys
>>> type(sys.version_info)
<class 'sys.version_info'>
আমি পেয়েছি একটি সমন্বয় ব্যবহার করে যে sys.version_info.major
এবং sys.version_info.minor
যথেষ্ট বলে মনে হয়। উদাহরণ স্বরূপ,...
import sys
if sys.version_info.major > 3:
print('Upgrade to Python 3')
exit(1)
আপনি পাইথন ৩ চালাচ্ছেন কিনা তা পরীক্ষা করে দেখুন আপনি আরও নির্দিষ্ট সংস্করণ দিয়ে এটি পরীক্ষা করতে পারেন ...
import sys
ver = sys.version_info
if ver.major > 2:
if ver.major == 3 and ver.minor <= 4:
print('Upgrade to Python 3.5')
exit(1)
আপনি কমপক্ষে পাইথন 3.5 চালাচ্ছেন কিনা তা পরীক্ষা করে দেখতে পারেন।
namedtuple
এবং টিপলের সাথে এটির তুলনা করা অবশ্যই কাজ করে। পূর্ণ সাম্যতা পেতে আপনার একটি পাঁচ-উপাদান টাইপল প্রয়োজন: প্রধান, গৌণ, মাইক্রো, রিলিজলেভেল (স্ট্রিং) এবং সিরিয়াল।
কমান্ড-লাইন থেকে একটি একক কমান্ডে পরীক্ষা করতে, তবে প্রধান, গৌণ, মাইক্রো সংস্করণ, রিলিজলিভ এবং সিরিয়াল অন্তর্ভুক্ত করুন :
> python -c "import sys; print('{}.{}.{}-{}-{}'.format(*sys.version_info))"
3.7.6-final-0
দ্রষ্টব্য: .format()
এফ-স্ট্রিংয়ের পরিবর্তে বা '.'.join()
আপনাকে স্বেচ্ছাচারিত বিন্যাস এবং বিভাজক চরগুলি ব্যবহার করার অনুমতি দেয়, উদাহরণস্বরূপ এটিকে গ্রেপযোগ্য এক-শব্দযুক্ত স্ট্রিং তৈরি করতে। আমি এটিকে ব্যাশ ইউটিলিটি স্ক্রিপ্টের মধ্যে রেখেছি যা সমস্ত গুরুত্বপূর্ণ সংস্করণ: পাইথন, নম্পি, পান্ডা, স্কলারন, ম্যাকস, এক্সকোড, কলং, ব্রু, কনডা, অ্যানাকোন্ডা, জিসিসি / জি ++ ইত্যাদি লগিং, প্রতিলিপি, সমস্যা সমাধানের বাগ-রিপোর্টিং ইত্যাদির জন্য দরকারী reports ।
আপনি যদি লিনাক্সে কাজ করে থাকেন তবে কমান্ড python
আউটপুট দেওয়া ঠিক হবে
পাইথন ২.৪.৩ (# 1, জুন 11 2009, 14:09:37)
[জিসিসি 4.1.2 20080704 (রেড হ্যাট 4.1.2-44)] লিনাক্স 2 এ
আরও তথ্যের জন্য "সহায়তা", "কপিরাইট", "ক্রেডিট" বা "লাইসেন্স" টাইপ করুন।
Python
স্ক্রিপ্টের মধ্যে সংস্করণ পেতে সহায়তা করে না , একই রকম উত্তর ইতিমধ্যে পোস্ট করা হয়েছে: stackoverflow.com/a/35294211/950762