2016-11-17 21 views
5

Podobnie jak zmienne modułu najwyższego poziomu __author__ lub __version__, czy istnieje konwencja określająca obsługiwane wersje Pythona dla pliku źródłowego Pythona?Konwencja w języku Python do określania zgodnych wersji interpretera?

Moja aplikacja to projekt, który zawiera skrypty, które muszą być kompatybilne z Pythonem 2.4. Chciałbym zwrócić na to uwagę w jakiś powszechnie rozpoznawalny sposób. Nie jestem pytany how to require a minimal Python version during execution. Moim problemem jest to, że programiści mogą przypadkowo korzystać z funkcji, która nie jest kompatybilna z wersją Pythona, którą ten skrypt musi obsługiwać. PyCharm może ostrzegać o niezgodności w Pythonie. Byłoby wspaniale, gdyby mógł pobrać tę adnotację i skonfigurować ostrzeżenie dla poszczególnych plików.

+0

Można zrobić coś w stylu 'import sys', a następnie' sys.version [0: 3] 'będzie' x.y', więc możesz przetestować przeciwko temu. –

+0

Spójrz na odpowiedzi na [to pytanie] (http://stackoverflow.com/questions/1093322/how-do-i-check-what-version-of-python-is-running-my-script) –

+1

Aby wyjaśnić: Problem, który chcę zapobiec, nie polega na tym, że ktoś uruchamia skrypt ze złą wersją. Moim problemem jest to, że programiści mogą przypadkowo korzystać z funkcji, która nie jest kompatybilna z wersją Pythona, którą ten skrypt musi obsługiwać. – user7610

Odpowiedz

2

Nie ma znanej mi konwencji do określania obsługiwanych wersji Pythona w pliku źródłowym Pythona. Jeśli tworzysz bibliotekę Pythona i rozpowszechniasz ją za pośrednictwem PyPI (i pip), możesz dodać metadane pakietów, które mówią, z którymi wersjami Python jest kompatybilny.

Na przykład dla mojego modułu scandir można zobaczyć na PyPI, że jest (obecnie) oznaczony jako zgodny z Python 2.6, 2.7 i 3.2-3.5. Że metadane mieszka w classifiers hasła w pakiecie na setup.py:

setup(
    name='scandir', 
    # ... 
    classifiers=[ 
     'Programming Language :: Python :: 2', 
     'Programming Language :: Python :: 2.6', 
     'Programming Language :: Python :: 2.7', 
     'Programming Language :: Python :: 3', 
     'Programming Language :: Python :: 3.2', 
     'Programming Language :: Python :: 3.3', 
     'Programming Language :: Python :: 3.4', 
     'Programming Language :: Python :: 3.5', 
     # ... 
    ] 
) 

Jeśli nie zwalniając to jako pakiet PyPI jedna alternatywa może być produkować ostrzeżenie, gdy moduł jest importowany na starszej wersji Pythona , mówiąc, że funkcja FizzBuzz nie jest obsługiwana w tej wersji Pythona.

import sys, warnings 
if sys.version_info < (3, 5): 
    warnings.warn('The FizzBuzz feature is only supported on Python 3.5+') 

Wszystkie powiedział, że osobiście bym po prostu keep it simple: dokument, że funkcja X jest obsługiwany tylko w Pythonie 3.5+ a następnie, jeśli ktoś spróbuje użyć tej funkcji na starszej wersji, tylko niech to nie .