2017-10-19 82 views
5

Ben piton standart kütüphanenin hem csv ve re modülleri kendi .__version__ niteliği olduğunu fark ettik: onlar standart kütüphanenin parçası olarakNiçin Python standart kütüphanesinin bazı modüllerinde __version__ dizeleri var? Kazara

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

Bu beni şaşırtıyor, bu yüzden onların sürümü ile tanımlanabilir beklenir sys.version (ve sys.version_info).

Modüllerin değişmesine rağmen, özniteliklerin değerleri Python 2.7.13 ve 3.6.1 için aynıdır.

Bunlar sadece bir çeşit "kod fosilleri" midir yoksa bir şekilde anlamlı mıdır ve programcılar değerlerine dikkat etmelidirler mi?

+1

Ben bir kütüphanede bir sürümü ile Python sürümünü karıştırmak düşünüyorum. Örneğin bir Linux-3.16 işletim sistemi ile çalışıyorsanız, web'de gezinmek için Firefox 3'ü çalıştırmanız gerektiği anlamına gelmez. Sürüm numaraları * değil * global. –

+2

Bir cevap değil, sanırım, ama: * "Her durumda, diğer Python sürümleri için bağımsız formda yayımlanan standart kitaplık modülleri, standart kitaplığa dahil edildiğinde bir modül sürüm numarası içerebilir ve OLMALIDIR Ayrı olarak paketlendiğinde bir sürüm numarası içerir. "* ([kaynak] (https://www.python.org/dev/peps/pep-0396/#id25)) – vaultah

+0

Ayrıca, standart kitaplık genellikle bir belirli sürüm numarası. Ancak paketler üzerinde gelişme devam ediyor. Bu nedenle, belki de bazı deneysel özellikler sağlayan, ancak standart kütüphaneye dahil edilmek üzere henüz tam olarak test edilmemiş olan "gece inşa" versiyonunu kullanmaya karar verebilirsiniz. Genellikle standart bir kütüphane, az ya da çok güvenilir * yüksek kaliteli paketleri seçmeyi amaçlamaktadır. –

cevap

1

Modülün C'deki kaynak versiyonunun değişmediğini, sadece python modülünün kaynak kodunun python'un farklı sürümlerinde değiştiğini varsayabiliriz. Kaynak kodunu python deposunda aramak tüm duruma ışık tutabilir. Örneğin

:

+0

Bu temel olarak doğrudur. Ancak, 're' sürümleri şu anda eşitlenmemiş gibi görünüyor: "re .__ version__" 2.2.1 verir, ancak "re.sre_compile._sre.copyright" 2.2.2 verir. – ekhumoro

+0

@ekhumoro 'sre', kendi sürümü olan python modül' re' içinde C kütüphanesi içe aktarılır, bu nedenle sürümleri –

+0

Hayır olamaz, bu sürümler, yanıtınızda verdiğiniz tam olarak nedenlerle aynı olmalıdır. Sanırım birileri C lib versiyonunun en son çarpışmasından sonra python modülünü güncellemeyi unuttu. Csv modülü, '__version__' doğrudan kendi C lib'undan alır, bu yüzden bu olası bir problemi yoktur. – ekhumoro