كيف يمكنني التحقق من إصدار Python الذي يشغل النص البرمجي الخاص بي؟


Answers

من سطر الأوامر (لاحظ رأس المال "V"):

python -V

هذا موثق في "الرجل بايثون".

Question

كيف يمكنني التحقق من إصدار مترجم Python الذي يفسر النص البرمجي الخاص بي؟




إذا كنت تعمل على لينكس فقط إعطاء إخراج python الأمر سيكون مثل هذا

Python 2.4.3 (رقم 1 ، 11 يونيو 2009 ، 14:09:37)

[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2

اكتب "help" أو "copyright" أو "credits" أو "license" لمزيد من المعلومات.




أبسط طريقة

فقط اكتب python في المحطة الطرفية ويمكنك رؤية الإصدار كما يلي

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.
>>> 



لقد وجدت هذه الطريقة في مكان ما.

>>> from platform import python_version
>>> print python_version()
2.7.8



مع six وحدات ، يمكنك القيام بذلك عن طريق:

import six

if six.PY2:
  # this is python2.x
else:
  # six.PY3
  # this is python3.x



فقط للمتعة ، ما يلي هو طريقة لفعل ذلك على CPython 1.0-3.7b2 ، Pypy ، Jython و Micropython. هذا هو أكثر من الفضول من طريقة للقيام بذلك في القانون الحديث. لقد كتبت ذلك كجزء من 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")



وكما قال سيث ، فإن النص الرئيسي يمكن أن يتحقق من sys.version_info (لكن لاحظ أن ذلك لم يظهر حتى 2.0 ، لذا إذا كنت ترغب في دعم الإصدارات الأقدم ، فستحتاج إلى التحقق من خاصية إصدار آخر لوحدة النظام sys).

ولكنك مازلت بحاجة إلى الاعتناء بعدم استخدام أي ميزات لغوية في Python في الملف غير متوفرة في إصدارات Python الأقدم. على سبيل المثال ، هذا مسموح به في Python 2.5 والإصدارات الأحدث:

try:
    pass
except:
    pass
finally:
    pass

ولكن لن تعمل في إصدارات Python الأقدم ، نظرًا لأنك قد لا تملك سوى الإصدار OR أو في النهاية تتطابق مع المحاولة. لذا ، للتوافق مع إصدارات Python الأقدم ، تحتاج إلى كتابة:

try:
    try:
        pass
    except:
        pass
finally:
    pass



رهانك المفضل هو على الأرجح شيء مثل:

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

بالإضافة إلى ذلك ، يمكنك دائمًا التفاف وارداتك في محاولة بسيطة ، والتي يجب أن تلتقط أخطاء في بناء الجملة. وإلى نقطة @ Heikki ، سيكون هذا الرمز متوافقًا مع الإصدارات الأقدم من python:

>>> try:
...     from my_module import twoPointSixCode
... except Exception: 
...     print "can't import, probably because your python is too old!"
>>>