我们从Python开源项目中,提取了以下50个代码示例,用于说明如何使用distutils.sysconfig.get_config_var()。
def _patch_pyimport(fspath, **kwargs): ext_suffix = sysconfig.get_config_var("EXT_SUFFIX") # XXX EXT_SUFFIX is None for pypy (python2.7) if ext_suffix is None and '.pypy' not in fspath.basename: return fspath.pyimport(**kwargs) else: # XXX EXT_SUFFIX is None for pypy (python2.7) if '.pypy' in fspath.basename: ext_suffix = fspath.ext basename = fspath.basename.split('.')[0] fspath = fspath.new(purebasename=basename, ext=fspath.ext) pkgroot = fspath.dirpath() fspath._ensuresyspath(True, pkgroot) names = fspath.relto(pkgroot).split(fspath.sep) modname = ".".join(names).replace(ext_suffix, "") __import__(modname) return sys.modules[modname]
def _load_preload_lib(): """profiling won't work if the library isn't preloaded using LD_PRELOAD, but we ensure it's loaded anyway so that we can import the cython extension and call its functions still - otherwise it won't import since it has not been linked to the preload library.""" import os import ctypes from distutils.sysconfig import get_config_var this_dir = os.path.dirname(os.path.realpath(__file__)) so_name = os.path.join(this_dir, 'preload') ext_suffix = get_config_var('EXT_SUFFIX') if ext_suffix is not None: so_name += ext_suffix else: so_name += '.so' import sys ctypes.CDLL(so_name, ctypes.RTLD_GLOBAL) return so_name
def get_ext_filename(self, fullname): filename = _build_ext.get_ext_filename(self, fullname) if fullname in self.ext_map: ext = self.ext_map[fullname] use_abi3 = ( six.PY3 and getattr(ext, 'py_limited_api') and get_abi3_suffix() ) if use_abi3: so_ext = get_config_var('EXT_SUFFIX') filename = filename[:-len(so_ext)] filename = filename + get_abi3_suffix() if isinstance(ext, Library): fn, ext = os.path.splitext(filename) return self.shlib_compiler.library_filename(fn, libtype) elif use_stubs and ext._links_to_dynamic: d, fn = os.path.split(filename) return os.path.join(d, 'dl-' + fn) return filename
def get_tests(config={}): tests = [] tests += list_test_cases(RSATest) try: from Crypto.PublicKey import _fastmath tests += list_test_cases(RSAFastMathTest) except ImportError: from distutils.sysconfig import get_config_var import inspect _fm_path = os.path.normpath(os.path.dirname(os.path.abspath( inspect.getfile(inspect.currentframe()))) +"/../../PublicKey/_fastmath"+get_config_var("SO")) if os.path.exists(_fm_path): raise ImportError("While the _fastmath module exists, importing "+ "it failed. This may point to the gmp or mpir shared library "+ "not being in the path. _fastmath was found at "+_fm_path) if config.get('slow_tests',1): tests += list_test_cases(RSASlowMathTest) return tests
def get_tests(config={}): tests = [] tests += list_test_cases(DSATest) try: from Crypto.PublicKey import _fastmath tests += list_test_cases(DSAFastMathTest) except ImportError: from distutils.sysconfig import get_config_var import inspect _fm_path = os.path.normpath(os.path.dirname(os.path.abspath( inspect.getfile(inspect.currentframe()))) +"/../../PublicKey/_fastmath"+get_config_var("SO")) if os.path.exists(_fm_path): raise ImportError("While the _fastmath module exists, importing "+ "it failed. This may point to the gmp or mpir shared library "+ "not being in the path. _fastmath was found at "+_fm_path) tests += list_test_cases(DSASlowMathTest) return tests
def run(argv=sys.argv): log.startLogging(file('tkunzip.log', 'w')) opt=TkunzipOptions() try: opt.parseOptions(argv[1:]) except usage.UsageError, e: print str(opt) print str(e) sys.exit(1) if opt['use-console']: # this should come before shell-exec to prevent infinite loop return doItConsolicious(opt) if opt['shell-exec'] or not 'Tkinter' in sys.modules: from distutils import sysconfig from twisted.scripts import tkunzip myfile=tkunzip.__file__ exe=os.path.join(sysconfig.get_config_var('prefix'), 'python.exe') return os.system('%s %s --use-console %s' % (exe, myfile, ' '.join(argv[1:]))) return doItTkinterly(opt)
def test_sysconfig_compiler_vars(self): # On OS X, binary installers support extension module building on # various levels of the operating system with differing Xcode # configurations. This requires customization of some of the # compiler configuration directives to suit the environment on # the installed machine. Some of these customizations may require # running external programs and, so, are deferred until needed by # the first extension module build. With Python 3.3, only # the Distutils version of sysconfig is used for extension module # builds, which happens earlier in the Distutils tests. This may # cause the following tests to fail since no tests have caused # the global version of sysconfig to call the customization yet. # The solution for now is to simply skip this test in this case. # The longer-term solution is to only have one version of sysconfig. import sysconfig as global_sysconfig if sysconfig.get_config_var('CUSTOMIZED_OSX_COMPILER'): self.skipTest('compiler flags customized') self.assertEqual(global_sysconfig.get_config_var('LDSHARED'), sysconfig.get_config_var('LDSHARED')) self.assertEqual(global_sysconfig.get_config_var('CC'), sysconfig.get_config_var('CC'))
def get_sdk_level(): cflags = get_config_var('CFLAGS') cflags = shlex.split(cflags) for i, val in enumerate(cflags): if val == '-isysroot': sdk = cflags[i+1] break else: return None if sdk == '/': return get_os_level() sdk = os.path.basename(sdk) assert sdk.startswith('MacOSX') assert sdk.endswith('.sdk') return sdk[6:-4]
def get_config_var(var): try: return sysconfig.get_config_var(var) except IOError as e: # Issue #1074 warnings.warn("{0}".format(e), RuntimeWarning) return None
def get_impl_ver(): """Return implementation version.""" impl_ver = get_config_var("py_version_nodot") if not impl_ver or get_abbr_impl() == 'pp': impl_ver = ''.join(map(str, get_impl_version_info())) return impl_ver
def get_flag(var, fallback, expected=True, warn=True): """Use a fallback method for determining SOABI flags if the needed config var is unset or unavailable.""" val = get_config_var(var) if val is None: if warn: logger.debug("Config variable '%s' is unset, Python ABI tag may " "be incorrect", var) return fallback() return val == expected
def get_abi_tag(): """Return the ABI tag based on SOABI (if available) or emulate SOABI (CPython 2, PyPy).""" soabi = get_config_var('SOABI') impl = get_abbr_impl() if not soabi and impl in ('cp', 'pp') and hasattr(sys, 'maxunicode'): d = '' m = '' u = '' if get_flag('Py_DEBUG', lambda: hasattr(sys, 'gettotalrefcount'), warn=(impl == 'cp')): d = 'd' if get_flag('WITH_PYMALLOC', lambda: impl == 'cp', warn=(impl == 'cp')): m = 'm' if get_flag('Py_UNICODE_SIZE', lambda: sys.maxunicode == 0x10ffff, expected=4, warn=(impl == 'cp' and sys.version_info < (3, 3))) \ and sys.version_info < (3, 3): u = 'u' abi = '%s%s%s%s%s' % (impl, get_impl_ver(), d, m, u) elif soabi and soabi.startswith('cpython-'): abi = 'cp' + soabi.split('-')[1] elif soabi: abi = soabi.replace('.', '_').replace('-', '_') else: abi = None return abi
def get_config_var(var): try: return sysconfig.get_config_var(var) except IOError as e: # pip Issue #1074 warnings.warn("{0}".format(e), RuntimeWarning) return None
def get_flag(var, fallback, expected=True, warn=True): """Use a fallback method for determining SOABI flags if the needed config var is unset or unavailable.""" val = get_config_var(var) if val is None: if warn: warnings.warn("Config variable '{0}' is unset, Python ABI tag may " "be incorrect".format(var), RuntimeWarning, 2) return fallback() return val == expected
def _get_config_var_837(name): """ In https://github.com/pypa/setuptools/pull/837, we discovered Python 3.3.0 exposes the extension suffix under the name 'SO'. """ if sys.version_info < (3, 3, 1): name = 'SO' return get_config_var(name)
def pytest_collect_file(path, parent): bin_exts = ['.so'] cy_exts = ['.pyx', '.py'] # collect .so files if .py file exists ext_suffix = sysconfig.get_config_var("EXT_SUFFIX") config = parent.config if path.ext in bin_exts: if config.getoption('--doctest-cython'): if ext_suffix is None: bin_file = path # XXX EXT_SUFFIX is None for pypy (python2.7) if '.pypy' in path.basename: basename = path.basename.split('.')[0] bin_file = path.new(purebasename=basename, ext=path.ext) else: basename = path.basename.replace(ext_suffix, "") bin_file = path.new(purebasename=basename, ext=path.ext) pyx_file = _find_matching_pyx_file(bin_file, cy_exts) # only run test if matching .so and .pyx files exist # create addoption for this ?? if pyx_file is not None: return DoctestModule(path, parent) # XXX patch pyimport to support PEP 3149
def get_ext_filename(self, ext_name): r"""Convert the name of an extension (eg. "foo.bar") into the name of the file from which it will be loaded (eg. "foo/bar.so", or "foo\bar.pyd"). """ from distutils.sysconfig import get_config_var ext_path = string.split(ext_name, '.') # OS/2 has an 8 character module (extension) limit :-( if os.name == "os2": ext_path[len(ext_path) - 1] = ext_path[len(ext_path) - 1][:8] # extensions in debug_mode are named 'module_d.pyd' under windows so_ext = get_config_var('SO') if os.name == 'nt' and self.debug: return os.path.join(*ext_path) + '_d' + so_ext return os.path.join(*ext_path) + so_ext
def runtime_library_dir_option(self, dir): # XXX Hackish, at the very least. See Python bug #445902: # http://sourceforge.net/tracker/index.php # ?func=detail&aid=445902&group_id=5470&atid=105470 # Linkers on different platforms need different options to # specify that directories need to be added to the list of # directories searched for dependencies when a dynamic library # is sought. GCC has to be told to pass the -R option through # to the linker, whereas other compilers just know this. # Other compilers may need something slightly different. At # this time, there's no way to determine this information from # the configuration data stored in the Python installation, so # we use this hack. compiler = os.path.basename(sysconfig.get_config_var("CC")) if sys.platform[:6] == "darwin": # MacOSX's linker doesn't understand the -R flag at all return "-L" + dir elif sys.platform[:5] == "hp-ux": if self._is_gcc(compiler): return ["-Wl,+s", "-L" + dir] return ["+s", "-L" + dir] elif sys.platform[:7] == "irix646" or sys.platform[:6] == "osf1V5": return ["-rpath", dir] elif self._is_gcc(compiler): return "-Wl,-R" + dir else: return "-R" + dir
def get_impl_ver(): """Return implementation version.""" impl_ver = sysconfig.get_config_var("py_version_nodot") if not impl_ver: impl_ver = ''.join(map(str, sys.version_info[:2])) return impl_ver