qiskit-aer/setup.py

147 lines
5.0 KiB
Python

# 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
)