(Initial) Questions about sysconfig.*

Peter Otten __peter__ at web.de
Fri Mar 4 05:22:22 EST 2016


Michael Felt wrote:

> First, a simple one:
> 
> sysconfig.is_python_build()
> 
>      Return True if the current Python installation was built from source.
> 
>>>>  sysconfig.is_python_build()
> False
> 
> Now, not earth shattering, but I did build this from source - so can
> someone help me with understanding why Python says no?

Looking into the source of a self-compilee Python version:

$ python3.6
Python 3.6.0a0 (default:c092148a1b55+, Mar  1 2016, 15:26:05) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sysconfig, inspect
>>> print(inspect.getsource(sysconfig.is_python_build))
def is_python_build(check_home=False):
    if check_home and _sys_home:
        return _is_python_source_dir(_sys_home)
    return _is_python_source_dir(_PROJECT_BASE)

>>> print(inspect.getsource(sysconfig._is_python_source_dir))
def _is_python_source_dir(d):
    for fn in ("Setup.dist", "Setup.local"):
        if os.path.isfile(os.path.join(d, "Modules", fn)):
            return True
    return False

>>> sysconfig._PROJECT_BASE
'/usr/local/bin'

So this effectively looks for the file /usr/local/bin/Modules/Setup.dist
or /usr/local/bin/Modules/Setup.local which of course fails. You have to 
invoke the interpreter in the directory where it was built:

$ /wherever/you/unpacked/and/compiled/python
Python 3.6.0a0 (default:c092148a1b55+, Mar  1 2016, 15:26:05) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sysconfig
>>> sysconfig.is_python_build()
True

> And a last question (more about the configure phase I expect)
> 
> ...() returns, among other things:
> 
> 'LIBRARY_OBJS': '\\',
> 'MODULE_OBJS': '\\',
> 'PARSER_HEADERS': '\\',
> 'PGENSRCS': '\\ \\',
> 'PYTHON_OBJS': '\\',
> 'QUICKTESTOPTS': '-l -x test_subprocess test_io test_lib2to3 \\',
> 
> 'SHLIB_EXT': '".so"',
> 
> Why are any of these using '\\' for anything on 'posix'?

Is that data actually used anywhere? I suspect this is a parsing mishap and 
these are actually line continuation indicators. In the Makefile I find (e. 
g.)

PYTHON_OBJS=	\
		Python/_warnings.o \
		Python/Python-ast.o \
		Python/asdl.o \
[snip]






More information about the Python-list mailing list