Cara cek versi python modul?

Saya baru saja menginstal python modul: membangun dan statlib dengan setuptools seperti ini:

# 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

Aku ingin menjadi mampu (pemrograman) memeriksa versi mereka. Apakah ada yang setara dengan python --version aku dapat dijalankan dari command line?

Saya python versi 2.7.3.

Mengomentari pertanyaan (3)
Larutan

Saya sarankan menggunakan pip di tempat easy_install. Dengan pip, anda bisa daftar semua paket diinstal dan versi mereka dengan

pip freeze

Di sistem linux, anda dapat menggunakan alat ini untuk grep(atau findstr pada Windows) untuk menemukan baris untuk paket tertentu anda're tertarik pada:

Linux:
$ pip freeze | grep lxml
lxml==2.3

Windows:
c:\> pip freeze | findstr lxml
lxml==2.3

Untuk setiap modul, anda dapat mencoba __versi__ atribut, namun ada modul tanpa itu:

$ python -c "import requests; print(requests.__version__)"
2.14.2
$ python -c "import lxml; print(lxml.__version__)"
Traceback (most recent call last):
  File "", line 1, in 
AttributeError: 'module' object has no attribute '__version__'

Terakhir, sebagai perintah dalam pertanyaan anda adalah diawali dengan sudo, tampaknya anda're menginstal ke lingkungan python global. Sangat menyarankan untuk mengambil melihat ke python virtual manajer, misalnya virtualenvwrapper

Komentar (7)

Anda dapat mencoba

>>> import statlib
>>> print statlib.__version__

>>> import construct
>>> print contruct.__version__
Komentar (8)

Gunakan pkg_resources modul didistribusikan dengan setuptools perpustakaan. Perhatikan bahwa string yang anda lulus untuk get_distribution metode harus sesuai dengan PyPI masuk.

>>> import pkg_resources
>>> pkg_resources.get_distribution("construct").version
'2.5.2'

dan jika anda ingin menjalankannya dari baris perintah yang dapat anda lakukan:

python -c "import pkg_resources; print(pkg_resources.get_distribution('construct').version)"

Perhatikan bahwa string yang anda lulus get_distribution method harus sama dengan nama paket yang terdaftar di PyPI, bukan nama modul yang anda mencoba untuk mengimpor.

Sayangnya ini bukanlah't selalu sama (misalnya anda melakukan pip install memcached, tapi impor memcache).

Komentar (7)

Saya pikir ini bisa membantu tapi pertama-tama install acara paket dalam rangka untuk menjalankan pip show kemudian menggunakan show untuk mendapatkan versi!

sudo pip install show
# in order to get package version execute the below command
sudo pip show YOUR_PACKAGE_NAME | grep Version
Komentar (6)

Cara yang lebih Baik untuk melakukannya adalah:


Untuk detail Paket tertentu

pip show <package_name>

Ini rincian keluar Package_name, Versi, Pengarang, Lokasi, dll.


$ pip show numpy
Name: numpy
Version: 1.13.3
Summary: NumPy: array processing for numbers, strings, records, and objects.
Home-page: http://www.numpy.org
Author: NumPy Developers
Author-email: numpy-discussion@python.org
License: BSD
Location: c:\users\prowinjvm\appdata\local\programs\python\python36\lib\site-packages
Requires:

Untuk Rincian lebih lanjut: >>> pip membantu


`pip` harus diperbarui untuk melakukan hal ini.
pip install --upgrade pip

Pada Windows merekomendasikan perintah ini:

python -m pip install --upgrade pip

Komentar (2)

Di python3 dengan tanda kurung di sekitar cetak

>>> import celery
>>> print(celery.__version__)
3.1.14
Komentar (3)

modul.__versi__ adalah hal pertama yang harus mencoba, tapi itu doesn't selalu bekerja.

Jika anda don't ingin keluar, dan anda're menggunakan pip 8 atau 9, anda masih dapat menggunakan pip.get_installed_distributions() untuk mendapatkan versi dari dalam Python:

update: larutan di sini bekerja di pip 8 dan 9, tetapi di pip 10 fungsi telah dipindahkan dari pip.get_installed_distributions untuk pip._internal.utils.misc.get_installed_distributions yang secara eksplisit menunjukkan bahwa itu's tidak untuk penggunaan eksternal. It's bukan ide yang baik untuk mengandalkan itu jika anda're menggunakan pip 10+.

import pip

pip.get_installed_distributions()  # -> [distribute 0.6.16 (...), ...]

[
    pkg.key + ': ' + pkg.version
    for pkg in pip.get_installed_distributions()
    if pkg.key in ['setuptools', 'statlib', 'construct']
] # -> nicely filtered list of ['setuptools: 3.3', ...]
Komentar (2)

Sebelumnya jawaban tidak memecahkan masalah saya, tapi ini kode apa:

import sys 
for name, module in sorted(sys.modules.items()): 
  if hasattr(module, '__version__'): 
    print name, module.__version__ 
Komentar (2)

Menggunakan dir() untuk mengetahui apakah modul memiliki `versi` atribut sama sekali.

>>> import selenium
>>> dir(selenium)
['__builtins__', '__doc__', '__file__', '__name__',
 '__package__', '__path__', '__version__']
>>> selenium.__version__
'3.141.0'
>>> selenium.__path__
['/venv/local/lib/python2.7/site-packages/selenium']
Komentar (1)

Anda dapat menggunakan importlib_metadata perpustakaan ini.

Jika anda're pada python <3.8, pertama install dengan: pip menginstal importlib_metadata Sejak python 3.8 it's termasuk dalam standar perpustakaan.

Kemudian, untuk memeriksa paket's versi (dalam contoh ini lxml) jalankan:

``

dari importlib_metadata versi impor versi('lxml') '4.3.1' ``

Perlu diingat bahwa ini hanya bekerja untuk paket-paket yang diinstal dari PyPI. Juga, anda harus lulus paket nama sebagai argumen untuk versi metode, bukan nama modul yang paket ini menyediakan (meskipun mereka're biasanya sama).

Komentar (0)

Jika metode di atas tidak bekerja, ada baiknya mencoba berikut di python:

import modulename

modulename.version
modulename.version_info

Lihat https://stackoverflow.com/questions/31146153/get-python-tornado-version/31146188

Perhatikan,.versi bekerja untuk saya pada beberapa orang lain selain tornado juga.

Komentar (0)

pertama tambahkan python, pip untuk variabel lingkungan anda. sehingga anda dapat mengeksekusi perintah dari command prompt. kemudian hanya memberikan python perintah. kemudian mengimpor paket

-->impor scrapy

kemudian cetak nama versi

-->cetak(scrapy.__versi__)

Ini pasti akan berhasil

Komentar (2)

Dengan asumsi kita menggunakan Jupyter Notebook (jika menggunakan Terminal, drop tanda seru):

  1. jika paket (misalnya xgboost) dipasang dengan pip:
!pip show xgboost
!pip freeze | grep xgboost
!pip list | grep xgboost
  1. jika paket (misalnya caffe) dipasang dengan conda:
!conda list caffe
Komentar (0)

Beberapa modul don't memiliki __versi__ atribut, sehingga cara termudah adalah check di terminal: pipdaftar

Komentar (0)

(lihat juga https://stackoverflow.com/a/56912280/7262247)

Saya menemukan itu cukup bisa diandalkan untuk menggunakan berbagai alat yang tersedia (termasuk salah satu yang terbaik pkg_resources yang disebutkan oleh Jakub Kukul' jawaban), seperti sebagian besar dari mereka tidak mencakup semua kasus. Misalnya

  • built-in modul
  • modul tidak terpasang tetapi hanya ditambahkan ke python path (dengan IDE anda misalnya)
  • dua versi dari modul yang sama yang tersedia (satu dalam python path menggantikan salah satu diinstal)

Karena kita membutuhkan cara yang dapat diandalkan untuk mendapatkan versi setiap paket, modul atau submodule, saya akhirnya menulis getversion. Hal ini cukup sederhana untuk menggunakan:

from getversion import get_module_version
import foo
version, details = get_module_version(foo)

Lihat dokumentasi untuk rincian.

Komentar (0)

Ini bekerja di Jupyter Notebook pada Windows, terlalu! Selama Jupyter diluncurkan dari bash-compliant baris perintah seperti Git Bash (MingW64), solusi yang diberikan di banyak jawaban yang dapat digunakan dalam Jupyter Notebook pada sistem Windows dengan satu tweak kecil.

I'm menjalankan windows 10 Pro dengan Python dipasang melalui Anaconda, dan berikut kode bekerja ketika saya meluncurkan Jupyter melalui Git Bash (tetapi tidak ketika saya memulai dari Anaconda prompt).

Tweak: Menambahkan tanda seru (!) di depan pip untuk membuatnya !pip.

>>>!pip show lxml | grep Version
Version: 4.1.0

>>>!pip freeze | grep lxml
lxml==4.1.0

>>>!pip list | grep lxml
lxml                               4.1.0                  

>>>!pip show lxml
Name: lxml
Version: 4.1.0
Summary: Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
Home-page: http://lxml.de/
Author: lxml dev team
Author-email: lxml-dev@lxml.de
License: BSD
Location: c:\users\karls\anaconda2\lib\site-packages
Requires: 
Required-by: jupyter-contrib-nbextensions
Komentar (0)

Untuk mendapatkan daftar non-standar (pip) modul impor di modul saat ini:

[{pkg.key : pkg.version} for pkg in pip.get_installed_distributions() 
   if pkg.key in set(sys.modules) & set(globals())]

Hasilnya:

>>> import sys, pip, nltk, bs4
>>> [{pkg.key : pkg.version} for pkg in pip.get_installed_distributions() if pkg.key in set(sys.modules) & set(globals())]
[{'pip': '9.0.1'}, {'nltk': '3.2.1'}, {'bs4': '0.0.1'}]

Catatan:

Kode ini diletakkan bersama-sama dari solusi investasi di halaman ini, dan dari https://stackoverflow.com/questions/4858100/how-to-list-imported-modules

Komentar (0)

Cepat python program untuk membuat daftar semua packges (anda dapat menyalinnya ke requirements.txt)

from pip._internal.utils.misc import get_installed_distributions
print_log = ''
for module in sorted(get_installed_distributions(), key=lambda x: x.key): 
    print_log +=  module.key + '~=' + module.version  + '\n'
print(print_log)

Output akan terlihat seperti:

asn1crypto~=0.24.0
attrs~=18.2.0
automat~=0.7.0
beautifulsoup4~=4.7.1
botocore~=1.12.98
Komentar (0)

Di Python versi 3,8 ada yang baru metadata modul di importlib paket, yang bisa melakukan itu juga.

Berikut adalah contoh dari dokumen:

>>> from importlib.metadata import version
>>> version('requests')
'2.22.0'
Komentar (0)

Bangunan di Jakub Kukul's jawaban saya menemukan cara yang lebih dapat diandalkan untuk memecahkan masalah ini.

Masalah utama dari pendekatan ini adalah bahwa membutuhkan paket-paket yang akan diinstal "secara konvensional" (dan itu tidak termasuk menggunakan pip menginstal --user), atau dalam sistem JALAN di Python inisialisasi.

Untuk mendapatkan sekitar itu anda dapat menggunakan pkg_resources.find_distributions(path_to_search). Ini pada dasarnya mencari distro yang akan diimpor jika path_to_search dalam sistem PATH.

Kita dapat iterate melalui generator ini seperti ini:

avail_modules = {}
distros = pkg_resources.find_distributions(path_to_search)
for d in distros:
    avail_modules[d.key] = d.version

Ini akan mengembalikan sebuah kamus yang memiliki modul-modul seperti kunci dan versi mereka sebagai nilai. Pendekatan ini dapat diperluas ke lebih banyak dari nomor versi.

Terima kasih untuk Jakub Kukul untuk menunjuk ke arah yang benar

Komentar (0)