forked from Qiskit/qiskit-aer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
setup.py
146 lines (122 loc) · 5.02 KB
/
setup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# pylint: disable=invalid-name
"""
Main setup file for qiskit-aer
"""
import importlib
import inspect
import os
import setuptools
import subprocess
import sys
from pkg_resources import parse_version
import platform
def strtobool(val):
val_lower = val.lower()
if val_lower in ('y', 'yes', 't', 'true', 'on', '1'):
return True
elif val_lower in ('n', 'no', 'f', 'false', 'off', '0'):
return False
else:
raise ValueError(f'Value: "{val}" not recognizes as True or False')
PACKAGE_NAME = os.getenv('QISKIT_AER_PACKAGE_NAME', 'qiskit-aer')
_DISABLE_CONAN = strtobool(os.getenv("DISABLE_CONAN", "OFF"))
_DISABLE_DEPENDENCY_INSTALL = strtobool(os.getenv("DISABLE_DEPENDENCY_INSTALL", "OFF"))
def install_needed_req(import_name, package_name=None, min_version=None, max_version=None):
if package_name is None:
package_name = import_name
install_ver = package_name
if min_version:
install_ver += '>=' + min_version
if max_version:
install_ver += '<' + max_version
try:
mod = importlib.import_module(import_name)
mod_ver = parse_version(mod.__version__)
if ((min_version and mod_ver < parse_version(min_version))
or (max_version and mod_ver >= parse_version(max_version))):
raise RuntimeError(f'{package_name} {mod_ver} is installed '
f'but required version is {install_ver}.')
except ImportError as err:
if _DISABLE_DEPENDENCY_INSTALL:
raise ImportError(str(err) +
f"\n{package_name} is a required dependency. "
f"Please provide it and repeat install")
subprocess.call([sys.executable, '-m', 'pip', 'install', install_ver])
if not _DISABLE_CONAN:
install_needed_req('conans', package_name='conan', min_version='1.31.2')
install_needed_req('skbuild', package_name='scikit-build', min_version='0.11.0')
install_needed_req('pybind11', min_version='2.6')
from skbuild import setup
# These are requirements that are both runtime/install dependencies and
# also build time/setup requirements and will be added to both lists
# of requirements
common_requirements = [
'numpy>=1.16.3',
'scipy>=1.0',
'pybind11>=2.6' # This isn't really an install requirement,
# Pybind11 is required to be pre-installed for
# CMake to successfully find header files.
# This should be fixed in the CMake build files.
]
setup_requirements = common_requirements + [
'scikit-build>=0.11.0',
'cmake!=3.17,!=3.17.0',
]
if not _DISABLE_CONAN:
setup_requirements.append('conan>=1.22.2')
requirements = common_requirements + ['qiskit-terra>=0.17.0']
if not hasattr(setuptools,
'find_namespace_packages') or not inspect.ismethod(
setuptools.find_namespace_packages):
print("Your setuptools version:'{}' does not support PEP 420 "
"(find_namespace_packages). Upgrade it to version >='40.1.0' and "
"repeat install.".format(setuptools.__version__))
sys.exit(1)
VERSION_PATH = os.path.join(os.path.dirname(__file__),
"qiskit", "providers", "aer", "VERSION.txt")
with open(VERSION_PATH, "r") as version_file:
VERSION = version_file.read().strip()
README_PATH = os.path.join(os.path.abspath(os.path.dirname(__file__)),
'README.md')
with open(README_PATH) as readme_file:
README = readme_file.read()
cmake_args = ["-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=10.9"]
is_win_32_bit = (platform.system() == 'Windows' and platform.architecture()[0] == "32bit")
if is_win_32_bit:
cmake_args.append("-DCMAKE_GENERATOR_PLATFORM=Win32")
setup(
name=PACKAGE_NAME,
version=VERSION,
packages=setuptools.find_namespace_packages(include=['qiskit.*']),
cmake_source_dir='.',
description="Qiskit Aer - High performance simulators for Qiskit",
long_description=README,
long_description_content_type='text/markdown',
url="https://github.com/Qiskit/qiskit-aer",
author="AER Development Team",
author_email="hello@qiskit.org",
license="Apache 2.0",
classifiers=[
"Environment :: Console",
"License :: OSI Approved :: Apache Software License",
"Intended Audience :: Developers",
"Intended Audience :: Science/Research",
"Operating System :: Microsoft :: Windows",
"Operating System :: MacOS",
"Operating System :: POSIX :: Linux",
"Programming Language :: C++",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Topic :: Scientific/Engineering",
],
python_requires=">=3.6",
install_requires=requirements,
setup_requires=setup_requirements,
include_package_data=True,
cmake_args=cmake_args,
keywords="qiskit aer simulator quantum addon backend",
zip_safe=False
)