koddla

Yazılımcıları bilgi ile güçlendirir.

Python modüllerinin sürümü nasıl kontrol edilir

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:

  1. 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üklemeyi pip install memcached ile yaparsınız, ama içe aktarma için import memcache kullanırsınız)
  2. 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.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Back to top