Qiskit/qiskit-metapackage

qiskit.__version__ shows wrong version number

mikbuch opened this issue · 2 comments

Informations

  • Qiskit version: 0.37.1
  • Python version: 3.10.4
  • Operating system: macOS

What is the current behavior?

qiskit.__version__ shows version 0.21.1 instead of 0.37.1

Steps to reproduce the problem

pip install qiskit==0.37.1
python3 -c "import qiskit; print(qiskit.__version__)"

Out:

0.21.1

Validation:

pip show qiskit

Out:

Name: qiskit
Version: 0.37.1
Summary: Software for developing quantum computing programs
Home-page: https://github.com/Qiskit/qiskit
Author: Qiskit Development Team
Author-email: hello@qiskit.org
License: Apache 2.0
Location: /Users/mbuch/.local/share/virtualenvs/qfmri-R8bnGQeP/lib/python3.10/site-packages
Requires: qiskit-aer, qiskit-ibmq-provider, qiskit-terra
Required-by:

What is the expected behavior?

The command:

python3 -c "import qiskit; print(qiskit.__version__)"

Should return:

0.37.1

Suggested solutions

I thought this is taken from the version reported in PyPi. For the first time I see such behaviour, so I don't yet have idea how to fix that.

Maybe it reports qiskit-terra's version: https://github.com/Qiskit/qiskit/blob/master/setup.py#L29

In setup.py the main version is ok: https://github.com/Qiskit/qiskit/blob/master/setup.py#L71

Yeah, this is intended behavior, it's a quirk/artifact of how Qiskit was/is built. The qiskit package on PyPI that you install with pip is represented by this git repository. It's a "metapackage" or package of packages that doesn't contain any source code and is setup to install all the packages that make up the qiskit python namespace (the contents of import qiskit). Historically that was the qiskit elements (terra, aer, ignis, and aqua) that all lived under qiskit.*. As part of that the root of the qiskit namespace was qiskit-terra, so the __version__ attribute for the qiskit namespace in python is qiskit-terra's version number.

If you'd like to see the full set of installed qiskit packages we export a separate entrypoint qiskit.__qiskit_version__ which returns a dictionary of all the installed qiskit packages including the metapackage version you're looking for.

@mtreinish , thank you for this immediate response!

I confirm, with the command:

python3 -c "import qiskit; print(qiskit.__qiskit_version__)"

I got:

{'qiskit-terra': '0.21.1', 'qiskit-aer': '0.10.4', 'qiskit-ignis': None, 'qiskit-ibmq-provider': '0.19.2', 'qiskit': '0.37.1', 'qiskit-nature': None, 'qiskit-finance': None, 'qiskit-optimization': None, 'qiskit-machine-learning': None}

that includes the metapackage version number: 'qiskit': '0.37.1'.

I think I understand the historic/legacy reasons behind the fact that terra's version number is displayed with qiskit namespace (qiskit.__version__). However, do you think it is possible to change that, so the __version__ attribute would show the version of the metapackage (the one that is published at PyPI)? Or maybe it is possible to "redirect" this attribute to show the output of qiskit.__qiskit_version__ instead? I am not an expert in Python module's (meta)attributes.

I just want to say that leaving things as they are now can be very confusing for the new users (such as myself), as the majority of the popular modules indicated the main (meta) package's version (numpy, scipy, etc.) -- i.e., the one that is also available at PyPI and via pip show <package>.

Thank you for the help again, and I hope the development of qiskit is going fine, it is a great package!