mirror of https://github.com/Qiskit/qiskit.git
Speed up qiskit import by not using pip in version.py (#3158)
* Speed up qiskit import by not using pip in version.py This commit speeds up the import time of qiskit by removing the pip call at run time. This call was overkill and slow, since all we really needed it for was to get the installed versions of the qiskit meta package. We were also using as a fallback if element.__version__ failed, but that was potentially misleading. This commit replaces the pip subprocess call with the pkg_resources stdlib module to query if the metapackage is installed and if so to grab that version. This is always faster than subprocess to call pip freeze. That being said the performace at import will vary based on the number of installed python packages because it still has to check all the installed packages. * Fix lint * Fix default for metapackage
This commit is contained in:
parent
cab185b571
commit
5c5a1d04b0
|
@ -18,9 +18,7 @@
|
|||
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import warnings
|
||||
|
||||
import pkg_resources
|
||||
|
||||
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
|
@ -92,57 +90,27 @@ def _get_qiskit_versions():
|
|||
from qiskit.providers import aer
|
||||
out_dict['qiskit-aer'] = aer.__version__
|
||||
except Exception:
|
||||
pass
|
||||
out_dict['qiskit-aer'] = None
|
||||
try:
|
||||
from qiskit import ignis
|
||||
out_dict['qiskit-ignis'] = ignis.__version__
|
||||
except Exception:
|
||||
pass
|
||||
out_dict['qiskit-ignis'] = None
|
||||
try:
|
||||
from qiskit.providers import ibmq
|
||||
out_dict['qiskit-ibmq-provider'] = ibmq.__version__
|
||||
except Exception:
|
||||
pass
|
||||
out_dict['qiskit-ibmq-provider'] = None
|
||||
try:
|
||||
from qiskit import aqua
|
||||
out_dict['qiskit-aqua'] = aqua.__version__
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
cmd = [sys.executable, '-m', 'pip', 'freeze']
|
||||
out_dict['qiskit-aqua'] = None
|
||||
try:
|
||||
reqs = _minimal_ext_cmd(cmd)
|
||||
except Exception as exc:
|
||||
warnings.warn(str(exc))
|
||||
return out_dict
|
||||
reqs_dict = {}
|
||||
for req in reqs.split():
|
||||
req_parts = req.decode().split('==')
|
||||
if len(req_parts) == 1 and req_parts[0].startswith('git'):
|
||||
if 'qiskit' in req_parts[0]:
|
||||
package = req_parts[0].split('#egg=')[1]
|
||||
sha = req_parts[0].split('@')[-1].split('#')[0]
|
||||
reqs_dict[package] = 'dev-' + sha
|
||||
continue
|
||||
elif len(req_parts) == 1:
|
||||
continue
|
||||
reqs_dict[req_parts[0]] = req_parts[1]
|
||||
# Dev/Egg _ to - conversion
|
||||
for package in ['qiskit_terra', 'qiskit_ignis', 'qiskit_aer',
|
||||
'qiskit_ibmq_provider', 'qiskit_aqua']:
|
||||
if package in reqs_dict:
|
||||
if package.replace('_', '-') in out_dict:
|
||||
continue
|
||||
out_dict[package.replace('_', '-')] = reqs_dict[package]
|
||||
out_dict['qiskit'] = pkg_resources.get_distribution('qiskit').version
|
||||
except Exception:
|
||||
out_dict['qiskit'] = None
|
||||
|
||||
for package in ['qiskit', 'qiskit-terra', 'qiskit-ignis', 'qiskit-aer',
|
||||
'qiskit-ibmq-provider', 'qiskit-aqua']:
|
||||
if package in out_dict:
|
||||
continue
|
||||
if package in reqs_dict:
|
||||
out_dict[package] = reqs_dict[package]
|
||||
else:
|
||||
out_dict[package] = None
|
||||
return out_dict
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue