def get_report(): report = {} # Get Python implementation report['python_implementation'] = platform.python_implementation() report['python_version'] = platform.python_version() # Get prefixes from sys report['sys'] = { 'prefix': getattr(sys, 'prefix', None), 'real_prefix': getattr(sys, 'real_prefix', None), 'base_prefix': getattr(sys, 'base_prefix', None) } # Get paths from sysconfig if hasattr(sysconfig, 'get_paths'): report['sysconfig'] = sysconfig.get_paths() else: paths = { 'stdlib': sysconfig.get_python_lib(standard_lib=True), 'platstdlib': sysconfig.get_python_lib(standard_lib=True, plat_specific=True), 'purelib': sysconfig.get_python_lib(), 'platlib': sysconfig.get_python_lib(plat_specific=True), 'include': sysconfig.get_python_inc(), 'platinclude': sysconfig.get_python_inc(plat_specific=True) } report['sysconfig'] = paths # Get site module directory report['site_mod_dir'] = os.path.dirname(os.path.abspath(site.__file__)) # Get user site-packages directory try: # Use getusersitepackages if this is present # as it ensures that the value is initialized properly. report['user_site'] = site.getusersitepackages() except AttributeError: report['user_site'] = site.USER_SITE return report
def run(self): relpath = os.path.relpath(self.tick_dir, self.cpp_build_dir) cmake_exe = os.environ.get('TICK_CMAKE', 'cmake') inc_dir = sysconfig.get_python_inc() cmake_cmd = [ cmake_exe, '-DPYTHON_INCLUDE_DIR={}'.format(inc_dir), '-DTICK_REBUILD_LIBS=OFF', relpath + '/../lib' ] # Feed the path to the built C++ extensions so CMake does not have to # build them again for mod in tick_modules: full_path = os.path.abspath( os.path.join(mod.module_ref.build, mod.module_ref.lib_filename)) cmake_cmd.append('-DTICK_LIB_{}={}'.format(mod.ext_name.upper(), full_path)) os.makedirs(os.path.join(self.cpp_build_dir, 'cpptest'), exist_ok=True) subprocess.check_call(cmake_cmd, cwd=self.cpp_build_dir) make_cmd = ['make', 'VERBOSE=1', 'all', '-j{}'.format(self.build_jobs)] subprocess.check_call(make_cmd, cwd=self.cpp_build_dir)
def run(self): relpath = os.path.relpath(self.tick_dir, self.cpp_build_dir) cmake_exe = os.environ.get('TICK_CMAKE', 'cmake') inc_dir = sysconfig.get_python_inc() cmake_cmd = [cmake_exe, '-DPYTHON_INCLUDE_DIR={}'.format(inc_dir), '-DTICK_REBUILD_LIBS=OFF', '-DBENCHMARK=OFF', relpath + '/../lib'] if TICK_CMAKE_GENERATOR is not None: cmake_cmd.extend(['-G', '{}'.format(TICK_CMAKE_GENERATOR)]) # Feed the path to the built C++ extensions so CMake does not have to # build them again for mod in tick_modules: full_path = os.path.abspath( os.path.join(mod.module_ref.build, mod.module_ref.lib_filename)) cmake_cmd.append( '-DTICK_LIB_{}={}'.format(mod.ext_name.upper(), full_path)) define_macros = [] if 'define_macros' in blas_info and \ any(key == 'HAVE_CBLAS' for key, _ in blas_info['define_macros']): cmake_cmd.append('-DUSE_BLAS=ON') os.makedirs(os.path.join(self.cpp_build_dir, 'cpptest'), exist_ok=True) subprocess.check_call(cmake_cmd, cwd=self.cpp_build_dir) make_cmd = ['make', 'VERBOSE=1', 'all', '-j{}'.format(self.build_jobs)] subprocess.check_call(make_cmd, cwd=self.cpp_build_dir)
def run(self): try: cpu_cores = max(1, cpu_count() - 1) python_executable = os.path.realpath(sys.executable) cmake_arg_list = list() cmake_arg_list.append("-DCMAKE_BUILD_TYPE=Release") cmake_arg_list.append("-DBUILD_PYTHON=ON") cmake_arg_list.append("-DPYTHON_EXECUTABLE={}".format(python_executable)) python_standard_lib = sysconfig.get_python_lib(standard_lib=True) python_site_packages = sysconfig.get_python_lib(standard_lib=False) python_lib_dir = os.path.dirname(python_standard_lib) python_library = get_python_library(python_lib_dir) python_include_dir = sysconfig.get_python_inc() numpy_include_dir = os.path.join(python_site_packages, "numpy/core/include") if os.path.exists(python_library) and os.path.exists(python_include_dir) and os.path.exists(numpy_include_dir): cmake_arg_list.append("-DPYTHON_LIBRARY={}".format(python_library)) cmake_arg_list.append("-DPYTHON_INCLUDE_DIR={}".format(python_include_dir)) cmake_arg_list.append("-DNUMPY_INCLUDES={}".format(numpy_include_dir)) if python_version[0] == "3": cmake_arg_list.append("-DBUILD_PYTHON3=ON") subprocess.check_call(['rm', '-f', 'CMakeCache.txt']) subprocess.check_call(['cmake'] + cmake_arg_list) subprocess.check_call(['make', '-j', str(cpu_cores)]) except subprocess.CalledProcessError: sys.stderr.write("\033[1m\nInstallation failed, you may be missing some dependencies. " "\nPlease check https://github.com/mwydmuch/ViZDoom/blob/master/doc/Building.md " "for details\n\n\033[0m") raise build.run(self)
def __init__(self): """ Initialise the configuration. """ self.platform = sys.platform self.version = sys.hexversion >> 8 if hasattr(sysconfig, 'get_path'): # The modern API. self.inc_dir = sysconfig.get_path('include') self.module_dir = sysconfig.get_path('platlib') else: # The legacy distutils API. self.inc_dir = sysconfig.get_python_inc(plat_specific=1) self.module_dir = sysconfig.get_python_lib(plat_specific=1) if sys.platform == 'win32': self.data_dir = sys.prefix self.lib_dir = sys.prefix + '\\libs' else: self.data_dir = sys.prefix + '/share' self.lib_dir = sys.prefix + '/lib'
def __init__(self): """ Initialise the configuration. """ self.platform = sys.platform self.version = sys.hexversion >> 8 if hasattr(sysconfig, "get_path"): # The modern API. self.inc_dir = sysconfig.get_path("include") self.module_dir = sysconfig.get_path("platlib") else: # The legacy distutils API. self.inc_dir = sysconfig.get_python_inc(plat_specific=1) self.module_dir = sysconfig.get_python_lib(plat_specific=1) if sys.platform == "win32": self.data_dir = sys.prefix self.lib_dir = sys.prefix + "\\libs" else: self.data_dir = sys.prefix + "/share" self.lib_dir = sys.prefix + "/lib"
def build_extension(self, ext): extdir = os.path.abspath( os.path.dirname(self.get_ext_fullpath(ext.name))) cmake_args = [ '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=' + extdir, '-DPYTHON_EXECUTABLE=' + sys.executable, '-DPYTHON_INCLUDE_DIR=' + sysconfig.get_python_inc() ] cfg = 'Debug' if self.debug else 'Release' build_args = ['--config', cfg] if platform.system() == 'Windows': cmake_args += [ '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_{}={}'.format( cfg.upper(), extdir) ] if sys.maxsize > 2**32: cmake_args += ['-A', 'x64'] build_args += ['--', '/m'] else: cmake_args += ['-DCMAKE_BUILD_TYPE=' + cfg] build_args += ['--', '-j2'] env = os.environ.copy() env['CXXFLAGS'] = '{} -DVERSION_INFO=\\"{}\\"'.format( env.get('CXXFLAGS', ''), self.distribution.get_version()) if not os.path.exists(self.build_temp): os.makedirs(self.build_temp) subprocess.check_call(['cmake', ext.sourcedir] + cmake_args, cwd=self.build_temp, env=env) subprocess.check_call(['cmake', '--build', '.'] + build_args, cwd=self.build_temp) # Copy *_test file to tests directory test_bin = os.path.join(self.build_temp, pkg + '_c_test') if os.path.exists(test_bin): self.copy_test_file(test_bin) print() # Add an empty line for cleaner output
def get_python_include_dir(python_version): """Get include directory associated with the current python interpreter.""" # determine python include dir python_include_dir = sysconfig.get_config_var('INCLUDEPY') # if Python.h not found (or python_include_dir is None), try to find a # suitable include dir found_python_h = (python_include_dir is not None or os.path.exists( os.path.join(python_include_dir, 'Python.h'))) if not found_python_h: # NOTE(opadron): these possible prefixes must be guarded against # AttributeErrors and KeyErrors because they each can throw on # different platforms or even different builds on the same platform. include_py = sysconfig.get_config_var('INCLUDEPY') include_dir = sysconfig.get_config_var('INCLUDEDIR') include = None plat_include = None python_inc = None python_inc2 = None try: include = sysconfig.get_path('include') except (AttributeError, KeyError): pass try: plat_include = sysconfig.get_path('platinclude') except (AttributeError, KeyError): pass try: python_inc = sysconfig.get_python_inc() except AttributeError: pass if include_py is not None: include_py = os.path.dirname(include_py) if include is not None: include = os.path.dirname(include) if plat_include is not None: plat_include = os.path.dirname(plat_include) if python_inc is not None: python_inc2 = os.path.join( python_inc, ".".join(map(str, sys.version_info[:2]))) candidate_prefixes = list( filter(bool, ( include_py, include_dir, include, plat_include, python_inc, python_inc2, ))) candidate_versions = (python_version, ) if python_version: candidate_versions += ('', ) candidates = (os.path.join(prefix, ''.join(('python', ver))) for (prefix, ver) in itertools.product( candidate_prefixes, candidate_versions)) for candidate in candidates: if os.path.exists(os.path.join(candidate, 'Python.h')): # we found an include directory python_include_dir = candidate break # TODO(opadron): what happens if we don't find an include directory? # Throw SKBuildError? return python_include_dir
def get_python_include_dir(python_version): """Get include directory associated with the current python interpreter.""" # determine python include dir python_include_dir = sysconfig.get_config_var('INCLUDEPY') # if Python.h not found (or python_include_dir is None), try to find a # suitable include dir found_python_h = ( python_include_dir is not None or os.path.exists(os.path.join(python_include_dir, 'Python.h')) ) if not found_python_h: # NOTE(opadron): these possible prefixes must be guarded against # AttributeErrors and KeyErrors because they each can throw on # different platforms or even different builds on the same platform. include_py = sysconfig.get_config_var('INCLUDEPY') include_dir = sysconfig.get_config_var('INCLUDEDIR') include = None plat_include = None python_inc = None python_inc2 = None try: include = sysconfig.get_path('include') except (AttributeError, KeyError): pass try: plat_include = sysconfig.get_path('platinclude') except (AttributeError, KeyError): pass try: python_inc = sysconfig.get_python_inc() except AttributeError: pass if include_py is not None: include_py = os.path.dirname(include_py) if include is not None: include = os.path.dirname(include) if plat_include is not None: plat_include = os.path.dirname(plat_include) if python_inc is not None: python_inc2 = os.path.join( python_inc, ".".join(map(str, sys.version_info[:2]))) candidate_prefixes = list(filter(bool, ( include_py, include_dir, include, plat_include, python_inc, python_inc2, ))) candidate_versions = (python_version,) if python_version: candidate_versions += ('',) candidates = ( os.path.join(prefix, ''.join(('python', ver))) for (prefix, ver) in itertools.product( candidate_prefixes, candidate_versions ) ) for candidate in candidates: if os.path.exists(os.path.join(candidate, 'Python.h')): # we found an include directory python_include_dir = candidate break # TODO(opadron): what happens if we don't find an include directory? # Throw SKBuildError? return python_include_dir
--- setup/extensions.py.orig 2011-05-20 14:36:29.000000000 +0000 +++ setup/extensions.py @@ -11,7 +11,7 @@ from distutils import sysconfig from PyQt4.pyqtconfig import QtGuiModuleMakefile -from setup import Command, islinux, isfreebsd, isosx, SRC, iswindows +from setup import Command, islinux, isfreebsd, isbsd, isosx, SRC, iswindows from setup.build_environment import fc_inc, fc_lib, chmlib_inc_dirs, \ fc_error, poppler_libs, poppler_lib_dirs, poppler_inc_dirs, podofo_inc, \ podofo_lib, podofo_error, poppler_error, pyqt, OSX_SDK, NMAKE, \ @@ -21,7 +21,7 @@ from setup.build_environment import fc_i jpg_lib_dirs, chmlib_lib_dirs, sqlite_inc_dirs, icu_inc_dirs, \ icu_lib_dirs MT -isunix = islinux or isosx or isfreebsd +isunix = islinux or isosx or isbsd make = 'make' if isunix else NMAKE @@ -205,7 +205,7 @@ if islinux: ldflags.append('-lpython'+sysconfig.get_python_version()) -if isfreebsd: +if isbsd: cflags.append('-pthread') ldflags.append('-shared') cflags.append('-I'+sysconfig.get_python_inc())
def get_python_include_dir(python_version): """Get include directory associated with the current python interpreter. Args: python_version (str): python version, may be partial. Returns: PathLike: python include dir Example: >>> # xdoc: +IGNORE_WANT >>> from skbuild.cmaker import CMaker >>> python_version = CMaker.get_python_version() >>> python_include_dir = CMaker.get_python_include_dir(python_version) >>> print('python_include_dir = {!r}'.format(python_include_dir)) python_include_dir = '.../conda/envs/py37/include/python3.7m' """ # determine python include dir python_include_dir = sysconfig.get_config_var('INCLUDEPY') # if Python.h not found (or python_include_dir is None), try to find a # suitable include dir found_python_h = (python_include_dir is not None and os.path.exists( os.path.join(python_include_dir, 'Python.h'))) if not found_python_h: # NOTE(opadron): these possible prefixes must be guarded against # AttributeErrors and KeyErrors because they each can throw on # different platforms or even different builds on the same platform. include_py = sysconfig.get_config_var('INCLUDEPY') include_dir = sysconfig.get_config_var('INCLUDEDIR') include = None plat_include = None python_inc = None python_inc2 = None try: include = sysconfig.get_path('include') except (AttributeError, KeyError): pass try: plat_include = sysconfig.get_path('platinclude') except (AttributeError, KeyError): pass try: python_inc = sysconfig.get_python_inc() except AttributeError: pass if include_py is not None: include_py = os.path.dirname(include_py) if include is not None: include = os.path.dirname(include) if plat_include is not None: plat_include = os.path.dirname(plat_include) if python_inc is not None: python_inc2 = os.path.join( python_inc, ".".join(map(str, sys.version_info[:2]))) candidate_prefixes = list( filter(bool, ( include_py, include_dir, include, plat_include, python_inc, python_inc2, ))) candidate_versions = (python_version, ) if python_version: candidate_versions += ('', ) pymalloc = None try: pymalloc = bool(sysconfig.get_config_var('WITH_PYMALLOC')) except AttributeError: pass if pymalloc: candidate_versions += (python_version + 'm', ) candidates = (os.path.join(prefix, ''.join(('python', ver))) for (prefix, ver) in itertools.product( candidate_prefixes, candidate_versions)) for candidate in candidates: if os.path.exists(os.path.join(candidate, 'Python.h')): # we found an include directory python_include_dir = candidate break # TODO(opadron): what happens if we don't find an include directory? # Throw SKBuildError? return python_include_dir