Banyak modul Python pihak ketiga memiliki atribut yang menyimpan informasi versi untuk modul tersebut (biasanya seperti module.VERSION
atau module.__version__
), namun beberapa tidak.
Contoh khusus dari modul tersebut adalah libxslt dan libxml2.
Saya perlu memeriksa bahwa versi yang benar dari modul-modul ini digunakan saat runtime. Apakah ada cara untuk melakukan ini?
Solusi potensial adalah membaca sumber pada waktu proses, melakukan hash, lalu membandingkannya dengan hash dari versi yang diketahui, tapi itu buruk.
Apakah ada solusi yang lebih baik?
pkg_resources
mungkin mengambil versi berbeda yang membayangi yang sebenarnya Anda jalankan karena memiliki prioritas lebih tinggi pada AndaPYTHONPATH
atau serupa.__version__
atribut: stackoverflow.com/q/17583443/562769pkg_resources
Tautan adalah Kesalahan 404Beberapa ide:
sumber
Kamu bisa memakai
untuk melihat paket yang diinstal dalam format persyaratan.
sumber
Anda dapat menggunakan
importlib_metadata
perpustakaan untuk ini.Jika Anda menggunakan python <
3.8
, instal dulu dengan:Sejak python
3.8
itu termasuk dalam perpustakaan standar python.Kemudian, untuk memeriksa versi paket (dalam contoh ini
lxml
) jalankan:Ingatlah bahwa ini hanya berfungsi untuk paket yang diinstal dari PyPI. Selain itu, Anda harus meneruskan nama paket sebagai argumen ke
version
metode tersebut, bukan nama modul yang disediakan paket ini (meskipun biasanya sama).sumber
Saya merasa sangat tidak dapat diandalkan untuk menggunakan berbagai alat yang tersedia (termasuk yang terbaik yang
pkg_resources
disebutkan oleh jawaban lain ini ), karena kebanyakan tidak mencakup semua kasus. Sebagai contohKarena kita membutuhkan cara yang dapat diandalkan untuk mendapatkan versi setiap paket, modul atau submodule, saya akhirnya menulis getversion . Cukup mudah digunakan:
Lihat dokumentasi untuk detailnya.
sumber
Untuk modul yang tidak menyediakan
__version__
yang berikut ini jelek tetapi berfungsi:atau
sumber