Hvordan kontrollerer man versionen af python-moduler?

Jeg har lige installeret python-modulerne: construct og statlib med setuptools på denne måde:

# 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

Jeg vil gerne kunne (programmatisk) kontrollere deres versioner. Er der en ækvivalent til python --version jeg kan køre fra kommandolinjen?

Min python-version er 2.7.3.

Løsning

Jeg foreslår, at du bruger [pip i stedet for easy_install] (https://stackoverflow.com/a/3220572/1265154). Med pip kan du få en liste over alle installerede pakker og deres versioner med

pip freeze

I de fleste linux-systemer kan du pipe dette til grep(eller findstr på Windows) for at finde rækken for den pågældende pakke du er interesseret i:

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

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

For et individuelt modul kan du prøve attributten [__version__] (http://www.python.org/dev/peps/pep-0396/), men der findes også moduler uden den:

$ 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__'

Endelig, da kommandoerne i dit spørgsmål er præfikset med sudo, ser det ud til, at du installerer til det globale python-miljø. Anbefaler kraftigt at tage kig på python virtual environment managers, for eksempel virtualenvwrapper

Kommentarer (7)

Du kan prøve

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

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

Jeg tror det kan hjælpe, men installer først show pakken for at køre pip show brug derefter show til at finde versionen!

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