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