Birkaç Python modülü yükledik ve bunların versiyonlarını merak ediyoruz. Varsaylım ki yüklediğimiz modüller construct
, statlib
ve setuptools
olsun.
# Install setuptools to be able to download the following
sudo apt-get install python-setuptools
# Install statlib for lightweight statistical tools
sudo easy_install statlib
# Install construct for packing/unpacking binary data
sudo easy_install construct
Bu yüklediğimiz modüllerini sürümlerini (kod tarafında) kontrol edebileceğimiz bir yöntem var mı? Örneğin python versiyonunu kontrol etmek isteseydik python --version
yazacaktık. Buna benzer bir şey arıyoruz.
Python >= 3.8:
Python >=3.8 kullanıyorsanız, bu işlem için yerleşik kitaplıktan bir modül kullanabilirsiniz. Bir paketin sürümünü denetlemek için (bu örnekte construct
) aşağıdaki kodu çalıştırın:
>>> from importlib.metadata import version
>>> version('construct')
'4.3.1'
Python < 3.8:
Setuptools
kitaplığı ile gelen pkg_resources
modülü kullanın. get_distribution
işlevine ilettiğiniz dizenin PyPI girdisine karşılık gelmesi gerektiğini unutmayın
>>> import pkg_resources
>>> pkg_resources.get_distribution('construct').version
'2.5.2'
Yan notlar:
get_distribution
işlevine ilettiğiniz dizenin, modülün adı değil, PyPI’da kayıtlı olan paket adı olması gerektiğini unutmayın. Ne yazık ki, bu ikisi her zaman aynı olmayabilir (örneğin yüklemeyipip install memcached
ile yaparsınız, ama içe aktarma içinimport memcache
kullanırsınız)- Bu çözümü komut satırından uygulamak istiyorsanız aşağıdaki gibi bir şey deneyebilirsiniz:
python -c \
"import pkg_resources; print(pkg_resources.get_distribution('construct').version)"
Pip ile modül versiyon kontrolü
Pip ile, yüklü tüm paketleri ve sürümlerini
pip freeze
ile görebiliriz. Çoğu linux sisteminde, ilgilendiğiniz belirli bir paketin satırını bulmak için grep
kullanabiliriz. (veya Windows’ta findstr
)
Linux:
$ pip freeze | grep lxml
lxml==2.3
Windows:
c:\> pip freeze | findstr lxml
lxml==2.3
Tek bir modül için, __version__
özniteliğini deneyebilirsiniz, ancak bu özniteliğin olmadığı modüller de bulunur:
$ python -c "import requests; print(requests.__version__)"
2.14.2
$ python -c "import lxml; print(lxml.__version__)"
Traceback (most recent call last):
File "<string>", line 1, in <module>
AttributeError: 'module' object has no attribute '__version__'
Dolayısıyla en sağlıklı yol importlib.metadata
veya pkg_resources
kullanmak olacaktır.