2017-10-19 68 views
5

Przez przypadek zauważyłem że oba csv i re moduły Pythona biblioteki standardowej mają .__version__ atrybut:Dlaczego istnieją ciągi __version__ w niektórych modułach standardowej biblioteki Python?

>>> import re, csv 
>>> re.__version__ 
'2.2.1' 
>>> csv.__version__ 
'1.0' 

Zaskakuje mnie, ponieważ są one częścią biblioteki standardowej, więc spodziewałbym ich wersji, które zostaną określone przez sys.version (i sys.version_info).

Zauważyłem, że wartości atrybutów są takie same dla Pythona 2.7.13 i 3.6.1, mimo że moduły się zmieniły.

Czy są one po prostu rodzajem "skamieniałości kodu", czy też mają jakiś sens, a programiści powinni zwracać uwagę na ich wartości?

+1

myślę mieszać wersji Pythona w wersji biblioteki. Jeśli na przykład pracujesz z systemem operacyjnym Linux-3.16, nie oznacza to, że musisz uruchomić Firefoksa 3, aby przeglądać Internet. Numery wersji to * nie * globalne. –

+2

Nie jest to odpowiedź, ale: * "W indywidualnych przypadkach standardowe moduły biblioteczne, które są również wydawane w formie samodzielnej dla innych wersji Pythona, MOGĄ zawierać numer wersji modułu, jeśli są zawarte w standardowej bibliotece, i POWINIEN BYĆ dołącz numer wersji, gdy jest zapakowany osobno. "* ([źródło] (https://www.python.org/dev/peps/pep-0396/#id25)) – vaultah

+0

Ponadto standardowa biblioteka to zazwyczaj zestaw pakietów z określony numer wersji. Ale rozwój pakietów nadal trwa. Możesz więc zdecydować się na "nocną kompilację" wersji 're', która może dostarczyć pewnych funkcji eksperymentalnych, ale nie jest jeszcze w pełni przetestowana, aby dołączyć ją do standardowej biblioteki. Zazwyczaj standardowa biblioteka ma na celu wybranie wysokiej jakości pakietów, które są mniej lub bardziej niezawodne *. –

Odpowiedz

1

Mogę założyć, że źródłowa wersja modułu na C nie uległa zmianie, tylko kod źródłowy modułu pythona zmienił się w różnych wersjach samego pythona. Poszukiwanie kodu źródłowego w repozytorium python może rzucić światło na całą sytuację.

Na przykład:

+0

Jest to zasadniczo w porządku. Jednak wersje 're' obecnie wydają się być niezsynchronizowane:' re .__ version__' daje 2.2.1, ale 're.sre_compile._sre.copyright' daje 2.2.2. – ekhumoro

+0

@ekhumoro 'sre' to C lib importowane w pythonie moduł' re', które ma swoją własną wersję, więc ich wersje mogą nie być równe –

+0

Nie, te wersje powinny być takie same, z dokładnie tych powodów, które podałeś w swojej odpowiedzi. Wydaje mi się, że ktoś po prostu zapomniał zaktualizować moduł Pythona, gdy ostatnio została pobita wersja C lib. Moduł csv otrzymuje jego '__version__' bezpośrednio z biblioteki C, więc nie ma on takiego potencjalnego problemu. – ekhumoro