forked from scipopt/PySCIPOpt
-
Notifications
You must be signed in to change notification settings - Fork 0
/
setup.py
104 lines (86 loc) · 3.55 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
from setuptools import setup, Extension
import os, platform, sys, re
# look for environment variable that specifies path to SCIP
scipoptdir = os.environ.get('SCIPOPTDIR', '').strip('"')
extra_compile_args = []
extra_link_args = []
# determine include directory
if os.path.exists(os.path.join(scipoptdir, 'src')):
# SCIP seems to be installed in place
includedir = os.path.abspath(os.path.join(scipoptdir, 'src'))
else:
# assume that SCIP is installed on the system
includedir = os.path.abspath(os.path.join(scipoptdir, 'include'))
print('Using include path <%s>.' % includedir)
# determine library
if os.path.exists(os.path.join(scipoptdir, 'lib/shared/libscipsolver.so')):
# SCIP seems to be created with make
libdir = os.path.abspath(os.path.join(scipoptdir, 'lib/shared'))
libname = 'scipsolver'
extra_compile_args.append('-DNO_CONFIG_HEADER')
else:
# assume that SCIP is installed on the system
libdir = os.path.abspath(os.path.join(scipoptdir, 'lib'))
libname = 'scip'
if platform.system() in ['Windows']:
libname = 'libscip'
print('Using SCIP library <%s> at <%s>.' % (libname,libdir))
# set runtime libraries
if platform.system() in ['Linux', 'Darwin']:
extra_link_args.append('-Wl,-rpath,'+libdir)
# enable debug mode if requested
if "--debug" in sys.argv:
extra_compile_args.append('-UNDEBUG')
sys.argv.remove("--debug")
use_cython = True
packagedir = os.path.join('src', 'pyscipopt')
with open(os.path.join(packagedir, '__init__.py'), 'r') as initfile:
version = re.search(r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]',
initfile.read(), re.MULTILINE).group(1)
try:
from Cython.Build import cythonize
except ImportError as err:
# if cython is not found _and_ src/pyscipopt/scip.c does not exist then we cannot do anything.
if not os.path.exists(os.path.join(packagedir, 'scip.c')):
print('Cython is required')
quit(1)
use_cython = False
# if src/pyscipopt/scip.pyx does not exist then there is no need for using cython
if not os.path.exists(os.path.join(packagedir, 'scip.pyx')):
use_cython = False
ext = '.pyx' if use_cython else '.c'
extensions = [Extension('pyscipopt.scip', [os.path.join(packagedir, 'scip'+ext)],
include_dirs=[includedir],
library_dirs=[libdir],
libraries=[libname],
extra_compile_args = extra_compile_args,
extra_link_args=extra_link_args
)]
if use_cython:
extensions = cythonize(extensions, compiler_directives={'language_level': 3})
with open('README.md') as f:
long_description = f.read()
setup(
name='PySCIPOpt',
version=version,
description='Python interface and modeling environment for SCIP',
long_description=long_description,
long_description_content_type='text/markdown',
url='https://github.com/SCIP-Interfaces/PySCIPOpt',
author='Zuse Institute Berlin',
author_email='[email protected]',
license='MIT',
classifiers=[
'Development Status :: 4 - Beta',
'Intended Audience :: Science/Research',
'Intended Audience :: Education',
'License :: OSI Approved :: MIT License',
'Programming Language :: Python :: 3',
'Programming Language :: Cython',
'Topic :: Scientific/Engineering :: Mathematics'],
ext_modules=extensions,
install_requires=['wheel'],
packages=['pyscipopt'],
package_dir={'pyscipopt': packagedir},
package_data={'pyscipopt': ['scip.pyx', 'scip.pxd', '*.pxi']}
)