Bagaimana Anda memeriksa apakah suatu paket berada pada versi terbaru secara terprogram dalam skrip dan mengembalikan benar atau salah?
Saya dapat memeriksa dengan skrip seperti ini:
package='gekko'
import pip
if hasattr(pip, 'main'):
from pip import main as pipmain
else:
from pip._internal import main as pipmain
pipmain(['search','gekko'])
atau dengan baris perintah:
(base) C:\User>pip search gekko
gekko (0.2.3) - Machine learning and optimization for dynamic systems
INSTALLED: 0.2.3 (latest)
Tetapi bagaimana saya memeriksa secara program dan mengembalikan benar atau salah?
pip
tidak memiliki API. Anda mungkin ingin menontonpip-api
proyek, tetapi belum banyak di sana.Jawaban:
Versi Cepat (Memeriksa paket saja)
Kode di bawah ini memanggil paket dengan versi yang tidak tersedia seperti
pip install package_name==random
. Panggilan mengembalikan semua versi yang tersedia. Program membaca versi terbaru.Program kemudian berjalan
pip show package_name
dan mendapatkan versi paket saat ini.Jika menemukan kecocokan, itu mengembalikan Benar, jika tidak Salah.
Ini adalah opsi yang andal mengingat berdiri
pip
Kode berikut ini untuk
pip list --outdated
:sumber
if (boolean): return True else: return False
lebih baik hanya untukreturn boolean
pip install p==0
misalnya).random
saya yakin tidak ada versi acakProyek saya
johnnydep
memiliki fitur ini.Dalam shell:
Dengan Python:
sumber
Sunting: Hapus pencarian pip
Terima kasih atas beberapa sarannya. Ini adalah versi baru yang tidak digunakan
pip search
tetapi justru menarik versi terbaru langsung dari yangpypi
diusulkan oleh Daniel Hill . Ini juga menyelesaikan masalah dengan substring pertandingan yang salah.Respon Asli
Berikut adalah solusi cepat yang mengambil informasi versi terbaru hanya pada
gekko
paket yang menarik.Ini menghasilkan pesan
Latest version (0.2.3) of gekko is installed
dan kembaliTrue
untuk menunjukkan versi terbaru (atauFalse
jika bukan versi terbaru). Ini mungkin bukan solusi terbaik karena hanya memeriksa substring versiif d[name] in s.decode():
tetapi lebih cepat daripip list --outdated
itu memeriksa semua paket. Ini bukan metode yang paling dapat diandalkan karena akan mengembalikan yang salahTrue
jika versi yang diinstal saat ini0.2.3
tetapi versi terbaru0.2.30
atau0.2.3a
. Suatu perbaikan akan secara terprogram mendapatkan versi terbaru dan melakukan perbandingan langsung.sumber
pip search
. Itu menggunakan XML-RPC API yang sudah usang, dan kadang-kadang hasil pencarian tidak akurat / salah. Bahkan saya pikir itu mungkin akan segera dihapus, lihat Menghapus perintah pencarian pip # 5216 .import gekko
dancurrent_version=gekko.__version__
alih-alih membuat kamus dari semua versi paket. Namun, tidak semua paket memiliki nomor versi yang dapat diakses dalam paket.Versi terbaru:
Proyek saya
luddite
memiliki fitur ini:Versi yang diinstal:
Cara kanonik untuk memeriksa versi yang terinstal hanya untuk mengakses
__version__
atribut namespace tingkat atas:Sayangnya tidak semua proyek mengatur atribut ini. Jika tidak, Anda dapat menggunakannya
pkg_resources
untuk menggali metadata:sumber
Ini harus melakukan trik setidaknya untuk keperluan demo. Cukup panggil
isLatestVersion
dengan nama paket yang ingin Anda periksa. Jika Anda menggunakan ini di tempat yang penting, Anda ingin mencoba / menangkap permintaan url karena akses internet mungkin tidak tersedia. Perhatikan juga bahwa jika paket tidak diinstalisLatestVersion
akan mengembalikan False.Ini diuji untuk Python 3.7.4 dan Pip 19.0.3.
sumber
pip._internal
bukan API publik. Itu bahkan secara eksplisit tidak disarankan dalam dokumen pip : " Anda tidak boleh menggunakan API internal pip dengan cara ini ".Tidaklah sulit untuk menulis skrip sederhana sendiri dengan menanyakan API PyPI . Dengan Python 3.8 terbaru, dimungkinkan hanya menggunakan pustaka standar (saat menggunakan Python 3.7 atau lebih lama, Anda harus menginstal
importlib_metadata
backport):Contoh penggunaan:
Jika Anda telah
packaging
menginstal, ini adalah alternatif yang lebih baikdistutils.version
untuk parsing versi:menjadi
sumber