poetry icon indicating copy to clipboard operation
poetry copied to clipboard

Incompatible Python version just used (instead of error) when `virtualenvs.create=false`

Open edmorley opened this issue 10 months ago • 5 comments

Description

When using POETRY_VIRTUALENVS_CREATE="false" combined with POETRY_VIRTUALENVS_USE_POETRY_PYTHON="true", if a project's declared requires-python doesn't match the Python used by Poetry, then poetry sync won't fail with a "version not compatible error" (as expected), but instead will proceed to sync using the wrong Python version.

This leads to confusing UX for end users of Heroku, if the version specified via their .python-version file (which is what controls the Python version installed for their app) doesn't match the Python versions in their pyproject.toml.

I believe this is because the conditional here needs additional handling for the value of create_venv (which is the value of virtualenvs.create): https://github.com/python-poetry/poetry/blob/79c207b41dfb5f9af78fde50d4e5660f7deaf324/src/poetry/utils/env/env_manager.py#L424-L428

Steps to reproduce

  1. Create a Dockerfile with the below contents.
  2. docker build . --progress plain --no-cache

(Note: I've created this Dockerfile as the easiest way to provide a minimal testcase; on Heroku we actually don't use Docker like this and install things in a slightly different way)

FROM heroku/heroku:24-build
ARG TARGETARCH
USER root

WORKDIR /testcase

RUN mkdir -p /testcase/.heroku/python \
  && curl -sSf "https://heroku-buildpack-python.s3.us-east-1.amazonaws.com/python-3.13.1-ubuntu-24.04-${TARGETARCH}.tar.zst" \
  | tar -x --zstd -C /testcase/.heroku/python
ENV PATH="/testcase/.heroku/python/bin:${PATH}"
ENV LD_LIBRARY_PATH="/testcase/.heroku/python/lib"

RUN which -a python3
RUN /usr/bin/python3 --version
RUN python3 --version

ENV POETRY_HOME="/testcase/.heroku/poetry"
ENV PATH="${POETRY_HOME}/bin:${PATH}"
RUN curl -sSL https://install.python-poetry.org | python3 - --version 2.1.1

COPY <<EOF pyproject.toml
[project]
name = "testcase-poetry"
version = "0.1.0"
requires-python = "3.12.*"
dependencies = [
    "typing-extensions"
]
[tool.poetry]
package-mode = false
EOF

COPY <<EOF poetry.lock
[[package]]
name = "typing-extensions"
version = "4.12.2"
description = "Backported and Experimental Type Hints for Python 3.8+"
optional = false
python-versions = ">=3.8"
groups = ["main"]
files = [
    {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"},
    {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"},
]
[metadata]
lock-version = "2.1"
python-versions = "3.12.*"
content-hash = "30427e182c131408fcdf15a6838a771f7e7c1e67fa6e0c33ccc82194052de8df"
EOF

ENV POETRY_VIRTUALENVS_CREATE="false"
ENV POETRY_VIRTUALENVS_USE_POETRY_PYTHON="true"

RUN poetry install --verbose
RUN python3.13 -c 'import typing_extensions; print(typing_extensions)'

Expected

For poetry sync to exit non-zero, with an error message that makes it clear that the Python version is incompatible (since the Poetry Python, which is also the first python on PATH, is 3.13, but yet the requires-python lists Python 3.12) - so end users know they need to fix their project's requires-python or else change the Python in the environment.

ie: The NoCompatiblePythonVersionFoundError error here

Actual

poetry sync outputs:

The currently activated Python version 3.13.1 is not supported by the project (3.12.*).
Trying to find and use a compatible version.
Using python3.12 (3.12.3)

...where Python 3.12 is actually the distro Python, not the Poetry Python - meaning Poetry has ignored what was configured via POETRY_VIRTUALENVS_USE_POETRY_PYTHON="true", and tried to find its own Python instead (which is something we don't want it to do).

In addition, even though Poetry said it was using Python 3.12, it actually goes on to use Poetry Python after all, and so installs the project into a Python 3.13 environment, even though the project isn't compatible with 3.13. As confirmed by the print(typing_extensions) step returning:

<module 'typing_extensions' from '/testcase/.heroku/python/lib/python3.13/site-packages/typing_extensions.py'>

This means the end-user build would appear to succeed, only for the app to potentially crash at run-time when the image is rolled out.

Workarounds

I couldn't find any.

Poetry Installation Method

install.python-poetry.org

Operating System

Debian

Poetry Version

2.1.1

Poetry Configuration

POETRY_VIRTUALENVS_CREATE="false"
POETRY_VIRTUALENVS_USE_POETRY_PYTHON="true"

Python Sysconfig

sysconfig.log
Platform: "linux-aarch64"
Python version: "3.13"
Current installation scheme: "posix_prefix"

Paths: 
    data = "/testcase/.heroku/python"
    include = "/testcase/.heroku/python/include/python3.13"
    platinclude = "/testcase/.heroku/python/include/python3.13"
    platlib = "/testcase/.heroku/python/lib/python3.13/site-packages"
    platstdlib = "/testcase/.heroku/python/lib/python3.13"
    purelib = "/testcase/.heroku/python/lib/python3.13/site-packages"
    scripts = "/testcase/.heroku/python/bin"
    stdlib = "/testcase/.heroku/python/lib/python3.13"

Variables: 
    ABIFLAGS = ""
    ABI_THREAD = ""
    AC_APPLE_UNIVERSAL_BUILD = "0"
    AIX_BUILDDATE = "0"
    AIX_GENUINE_CPLUSPLUS = "0"
    ALIGNOF_LONG = "8"
    ALIGNOF_MAX_ALIGN_T = "16"
    ALIGNOF_SIZE_T = "8"
    ALT_SOABI = "0"
    ANDROID_API_LEVEL = "0"
    APP_STORE_COMPLIANCE_PATCH = ""
    AR = "ar"
    ARFLAGS = "rcs"
    BASECFLAGS = "-fno-strict-overflow -Wsign-compare"
    BASECPPFLAGS = ""
    BASEMODLIBS = ""
    BINDIR = "/tmp/python/bin"
    BINLIBDEST = "/tmp/python/lib/python3.13"
    BLDLIBRARY = "-L. -lpython3.13"
    BLDSHARED = "gcc -shared -Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -Wl,-z,relro -Wl,--strip-all"
    BOOTSTRAP_HEADERS = "\"
    BUILDEXE = ""
    BUILDPYTHON = "python"
    BUILD_GNU_TYPE = "aarch64-unknown-linux-gnu"
    BUILD_SCRIPTS_DIR = "build/scripts-3.13"
    BYTESTR_DEPS = "\"
    CC = "gcc"
    CCSHARED = "-fPIC"
    CFLAGS = "-fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall   -g -O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -ffile-prefix-map=/tmp/src=. -flto=auto -ffat-lto-objects -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard"
    CFLAGSFORSHARED = "-fPIC"
    CFLAGS_ALIASING = ""
    CODECS_COMMON_HEADERS = "./Modules/cjkcodecs/multibytecodec.h ./Modules/cjkcodecs/cjkcodecs.h"
    COMPILEALL_OPTS = "-j0"
    CONFIGFILES = "configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in"
    CONFIGURE_CFLAGS = ""
    CONFIGURE_CFLAGS_NODIST = "-fno-semantic-interposition -flto -fuse-linker-plugin -ffat-lto-objects -flto-partition=none -g -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden"
    CONFIGURE_CPPFLAGS = ""
    CONFIGURE_LDFLAGS = ""
    CONFIGURE_LDFLAGS_NODIST = "-fno-semantic-interposition -flto -fuse-linker-plugin -ffat-lto-objects -flto-partition=none -g"
    CONFIGURE_LDFLAGS_NOLTO = "-fno-lto"
    CONFIG_ARGS = "'--build=aarch64-linux-gnu' '--enable-loadable-sqlite-extensions' '--enable-optimizations' '--enable-option-checking=fatal' '--prefix=/tmp/python' '--with-ensurepip=no' '--with-system-expat' '--enable-shared' '--with-lto' '--without-static-libpython' '--disable-test-modules' 'build_alias=aarch64-linux-gnu'"
    CONFINCLUDEDIR = "/tmp/python/include"
    CONFINCLUDEPY = "/tmp/python/include/python3.13"
    COREPYTHONPATH = ""
    COVERAGE_INFO = "/tmp/src/coverage.info"
    COVERAGE_LCOV_OPTIONS = "--rc lcov_branch_coverage=1"
    COVERAGE_REPORT = "/tmp/src/lcov-report"
    COVERAGE_REPORT_OPTIONS = "--rc lcov_branch_coverage=1 --branch-coverage --title "CPython 3.13 LCOV report [commit $(shell )]""
    CPPFLAGS = "-I. -I./Include"
    CXX = "g++"
    DESTDIRS = "/tmp/python /tmp/python/lib /tmp/python/lib/python3.13 /tmp/python/lib/python3.13/lib-dynload"
    DESTLIB = "/tmp/python/lib/python3.13"
    DESTPATH = ""
    DESTSHARED = "/tmp/python/lib/python3.13/lib-dynload"
    DFLAGS = ""
    DIRMODE = "755"
    DIST = "README.rst ChangeLog configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in Include Lib Misc Ext-dummy"
    DISTDIRS = "Include Lib Misc Ext-dummy"
    DISTFILES = "README.rst ChangeLog configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in"
    DLINCLDIR = "."
    DLLLIBRARY = ""
    DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754 = "0"
    DOUBLE_IS_BIG_ENDIAN_IEEE754 = "0"
    DOUBLE_IS_LITTLE_ENDIAN_IEEE754 = "1"
    DSYMUTIL = ""
    DSYMUTIL_PATH = ""
    DTRACE = ""
    DTRACE_DEPS = "\"
    DTRACE_HEADERS = ""
    DTRACE_OBJS = ""
    DYNLOADFILE = "dynload_shlib.o"
    ENABLE_IPV6 = "1"
    ENSUREPIP = "no"
    EXE = ""
    EXEMODE = "755"
    EXENAME = "/tmp/python/bin/python3.13"
    EXPORTSFROM = ""
    EXPORTSYMS = ""
    EXTRATESTOPTS = ""
    EXT_SUFFIX = ".cpython-313-aarch64-linux-gnu.so"
    FILEMODE = "644"
    FREEZE_MODULE = "./_bootstrap_python ./Programs/_freeze_module.py"
    FREEZE_MODULE_BOOTSTRAP = "./Programs/_freeze_module"
    FREEZE_MODULE_BOOTSTRAP_DEPS = "Programs/_freeze_module"
    FREEZE_MODULE_DEPS = "_bootstrap_python ./Programs/_freeze_module.py"
    FROZEN_FILES_IN = "\"
    FROZEN_FILES_OUT = "\"
    GETPGRP_HAVE_ARG = "0"
    GITBRANCH = ""
    GITTAG = ""
    GITVERSION = ""
    GNULD = "yes"
    HAVE_ACCEPT = "1"
    HAVE_ACCEPT4 = "1"
    HAVE_ACOSH = "1"
    HAVE_ADDRINFO = "1"
    HAVE_ALARM = "1"
    HAVE_ALIGNED_REQUIRED = "0"
    HAVE_ALLOCA_H = "1"
    HAVE_ALTZONE = "0"
    HAVE_ASINH = "1"
    HAVE_ASM_TYPES_H = "1"
    HAVE_ATANH = "1"
    HAVE_BIND = "1"
    HAVE_BIND_TEXTDOMAIN_CODESET = "1"
    HAVE_BLUETOOTH_BLUETOOTH_H = "0"
    HAVE_BLUETOOTH_H = "0"
    HAVE_BROKEN_MBSTOWCS = "0"
    HAVE_BROKEN_NICE = "0"
    HAVE_BROKEN_PIPE_BUF = "0"
    HAVE_BROKEN_POLL = "0"
    HAVE_BROKEN_POSIX_SEMAPHORES = "0"
    HAVE_BROKEN_PTHREAD_SIGMASK = "0"
    HAVE_BROKEN_SEM_GETVALUE = "0"
    HAVE_BROKEN_UNSETENV = "0"
    HAVE_BUILTIN_ATOMIC = "1"
    HAVE_BZLIB_H = "1"
    HAVE_CHFLAGS = "0"
    HAVE_CHMOD = "1"
    HAVE_CHOWN = "1"
    HAVE_CHROOT = "1"
    HAVE_CLOCK = "1"
    HAVE_CLOCK_GETRES = "1"
    HAVE_CLOCK_GETTIME = "1"
    HAVE_CLOCK_NANOSLEEP = "1"
    HAVE_CLOCK_SETTIME = "1"
    HAVE_CLOCK_T = "1"
    HAVE_CLOSEFROM = "1"
    HAVE_CLOSE_RANGE = "1"
    HAVE_COMPUTED_GOTOS = "1"
    HAVE_CONFSTR = "1"
    HAVE_CONIO_H = "0"
    HAVE_CONNECT = "1"
    HAVE_COPY_FILE_RANGE = "1"
    HAVE_CTERMID = "1"
    HAVE_CTERMID_R = "0"
    HAVE_CURSES_FILTER = "1"
    HAVE_CURSES_H = "1"
    HAVE_CURSES_HAS_KEY = "1"
    HAVE_CURSES_IMMEDOK = "1"
    HAVE_CURSES_IS_PAD = "1"
    HAVE_CURSES_IS_TERM_RESIZED = "1"
    HAVE_CURSES_RESIZETERM = "1"
    HAVE_CURSES_RESIZE_TERM = "1"
    HAVE_CURSES_SYNCOK = "1"
    HAVE_CURSES_TYPEAHEAD = "1"
    HAVE_CURSES_USE_ENV = "1"
    HAVE_CURSES_WCHGAT = "1"
    HAVE_DB_H = "1"
    HAVE_DECL_RTLD_DEEPBIND = "1"
    HAVE_DECL_RTLD_GLOBAL = "1"
    HAVE_DECL_RTLD_LAZY = "1"
    HAVE_DECL_RTLD_LOCAL = "1"
    HAVE_DECL_RTLD_MEMBER = "0"
    HAVE_DECL_RTLD_NODELETE = "1"
    HAVE_DECL_RTLD_NOLOAD = "1"
    HAVE_DECL_RTLD_NOW = "1"
    HAVE_DECL_TZNAME = "0"
    HAVE_DEVICE_MACROS = "1"
    HAVE_DEV_PTC = "0"
    HAVE_DEV_PTMX = "1"
    HAVE_DIRECT_H = "0"
    HAVE_DIRENT_D_TYPE = "1"
    HAVE_DIRENT_H = "1"
    HAVE_DIRFD = "1"
    HAVE_DLFCN_H = "1"
    HAVE_DLOPEN = "1"
    HAVE_DUP = "1"
    HAVE_DUP2 = "1"
    HAVE_DUP3 = "1"
    HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH = "0"
    HAVE_DYNAMIC_LOADING = "1"
    HAVE_EDITLINE_READLINE_H = "0"
    HAVE_ENDIAN_H = "1"
    HAVE_EPOLL = "1"
    HAVE_EPOLL_CREATE1 = "1"
    HAVE_ERF = "1"
    HAVE_ERFC = "1"
    HAVE_ERRNO_H = "1"
    HAVE_EVENTFD = "1"
    HAVE_EXECV = "1"
    HAVE_EXPLICIT_BZERO = "1"
    HAVE_EXPLICIT_MEMSET = "0"
    HAVE_EXPM1 = "1"
    HAVE_FACCESSAT = "1"
    HAVE_FCHDIR = "1"
    HAVE_FCHMOD = "1"
    HAVE_FCHMODAT = "1"
    HAVE_FCHOWN = "1"
    HAVE_FCHOWNAT = "1"
    HAVE_FCNTL_H = "1"
    HAVE_FDATASYNC = "1"
    HAVE_FDOPENDIR = "1"
    HAVE_FDWALK = "0"
    HAVE_FEXECVE = "1"
    HAVE_FFI_CLOSURE_ALLOC = "1"
    HAVE_FFI_PREP_CIF_VAR = "1"
    HAVE_FFI_PREP_CLOSURE_LOC = "1"
    HAVE_FLOCK = "1"
    HAVE_FORK = "1"
    HAVE_FORK1 = "0"
    HAVE_FORKPTY = "1"
    HAVE_FPATHCONF = "1"
    HAVE_FSEEK64 = "0"
    HAVE_FSEEKO = "1"
    HAVE_FSTATAT = "1"
    HAVE_FSTATVFS = "1"
    HAVE_FSYNC = "1"
    HAVE_FTELL64 = "0"
    HAVE_FTELLO = "1"
    HAVE_FTIME = "1"
    HAVE_FTRUNCATE = "1"
    HAVE_FUTIMENS = "1"
    HAVE_FUTIMES = "1"
    HAVE_FUTIMESAT = "1"
    HAVE_GAI_STRERROR = "1"
    HAVE_GCC_ASM_FOR_MC68881 = "0"
    HAVE_GCC_ASM_FOR_X64 = "0"
    HAVE_GCC_ASM_FOR_X87 = "0"
    HAVE_GCC_UINT128_T = "1"
    HAVE_GDBM_DASH_NDBM_H = "0"
    HAVE_GDBM_H = "1"
    HAVE_GDBM_NDBM_H = "0"
    HAVE_GETADDRINFO = "1"
    HAVE_GETC_UNLOCKED = "1"
    HAVE_GETEGID = "1"
    HAVE_GETENTROPY = "1"
    HAVE_GETEUID = "1"
    HAVE_GETGID = "1"
    HAVE_GETGRENT = "1"
    HAVE_GETGRGID = "1"
    HAVE_GETGRGID_R = "1"
    HAVE_GETGRNAM_R = "1"
    HAVE_GETGROUPLIST = "1"
    HAVE_GETGROUPS = "1"
    HAVE_GETHOSTBYADDR = "1"
    HAVE_GETHOSTBYNAME = "1"
    HAVE_GETHOSTBYNAME_R = "1"
    HAVE_GETHOSTBYNAME_R_3_ARG = "0"
    HAVE_GETHOSTBYNAME_R_5_ARG = "0"
    HAVE_GETHOSTBYNAME_R_6_ARG = "1"
    HAVE_GETHOSTNAME = "1"
    HAVE_GETITIMER = "1"
    HAVE_GETLOADAVG = "1"
    HAVE_GETLOGIN = "1"
    HAVE_GETNAMEINFO = "1"
    HAVE_GETPAGESIZE = "1"
    HAVE_GETPEERNAME = "1"
    HAVE_GETPGID = "1"
    HAVE_GETPGRP = "1"
    HAVE_GETPID = "1"
    HAVE_GETPPID = "1"
    HAVE_GETPRIORITY = "1"
    HAVE_GETPROTOBYNAME = "1"
    HAVE_GETPWENT = "1"
    HAVE_GETPWNAM_R = "1"
    HAVE_GETPWUID = "1"
    HAVE_GETPWUID_R = "1"
    HAVE_GETRANDOM = "1"
    HAVE_GETRANDOM_SYSCALL = "1"
    HAVE_GETRESGID = "1"
    HAVE_GETRESUID = "1"
    HAVE_GETRUSAGE = "1"
    HAVE_GETSERVBYNAME = "1"
    HAVE_GETSERVBYPORT = "1"
    HAVE_GETSID = "1"
    HAVE_GETSOCKNAME = "1"
    HAVE_GETSPENT = "1"
    HAVE_GETSPNAM = "1"
    HAVE_GETUID = "1"
    HAVE_GETWD = "1"
    HAVE_GLIBC_MEMMOVE_BUG = "0"
    HAVE_GRANTPT = "1"
    HAVE_GRP_H = "1"
    HAVE_HSTRERROR = "1"
    HAVE_HTOLE64 = "1"
    HAVE_IF_NAMEINDEX = "1"
    HAVE_INET_ATON = "1"
    HAVE_INET_NTOA = "1"
    HAVE_INET_PTON = "1"
    HAVE_INITGROUPS = "1"
    HAVE_INTTYPES_H = "1"
    HAVE_IO_H = "0"
    HAVE_IPA_PURE_CONST_BUG = "0"
    HAVE_KILL = "1"
    HAVE_KILLPG = "1"
    HAVE_KQUEUE = "0"
    HAVE_LANGINFO_H = "1"
    HAVE_LARGEFILE_SUPPORT = "0"
    HAVE_LCHFLAGS = "0"
    HAVE_LCHMOD = "0"
    HAVE_LCHOWN = "1"
    HAVE_LIBB2 = "0"
    HAVE_LIBDB = "1"
    HAVE_LIBDL = "1"
    HAVE_LIBDLD = "0"
    HAVE_LIBIEEE = "0"
    HAVE_LIBINTL_H = "1"
    HAVE_LIBRESOLV = "0"
    HAVE_LIBSENDFILE = "0"
    HAVE_LIBSQLITE3 = "1"
    HAVE_LIBUTIL_H = "0"
    HAVE_LINK = "1"
    HAVE_LINKAT = "1"
    HAVE_LINUX_AUXVEC_H = "1"
    HAVE_LINUX_CAN_BCM_H = "1"
    HAVE_LINUX_CAN_H = "1"
    HAVE_LINUX_CAN_J1939_H = "1"
    HAVE_LINUX_CAN_RAW_FD_FRAMES = "1"
    HAVE_LINUX_CAN_RAW_H = "1"
    HAVE_LINUX_CAN_RAW_JOIN_FILTERS = "1"
    HAVE_LINUX_FS_H = "1"
    HAVE_LINUX_LIMITS_H = "1"
    HAVE_LINUX_MEMFD_H = "1"
    HAVE_LINUX_NETLINK_H = "1"
    HAVE_LINUX_QRTR_H = "1"
    HAVE_LINUX_RANDOM_H = "1"
    HAVE_LINUX_SOUNDCARD_H = "1"
    HAVE_LINUX_TIPC_H = "1"
    HAVE_LINUX_VM_SOCKETS_H = "1"
    HAVE_LINUX_WAIT_H = "1"
    HAVE_LISTEN = "1"
    HAVE_LOCKF = "1"
    HAVE_LOG1P = "1"
    HAVE_LOG2 = "1"
    HAVE_LOGIN_TTY = "1"
    HAVE_LONG_DOUBLE = "1"
    HAVE_LSTAT = "1"
    HAVE_LUTIMES = "1"
    HAVE_LZMA_H = "0"
    HAVE_MADVISE = "1"
    HAVE_MAKEDEV = "1"
    HAVE_MBRTOWC = "1"
    HAVE_MEMFD_CREATE = "1"
    HAVE_MEMRCHR = "1"
    HAVE_MINIX_CONFIG_H = "0"
    HAVE_MKDIRAT = "1"
    HAVE_MKFIFO = "1"
    HAVE_MKFIFOAT = "1"
    HAVE_MKNOD = "1"
    HAVE_MKNODAT = "1"
    HAVE_MKTIME = "1"
    HAVE_MMAP = "1"
    HAVE_MREMAP = "1"
    HAVE_NANOSLEEP = "1"
    HAVE_NCURSES = "0"
    HAVE_NCURSESW = "1"
    HAVE_NCURSESW_CURSES_H = "1"
    HAVE_NCURSESW_NCURSES_H = "1"
    HAVE_NCURSESW_PANEL_H = "1"
    HAVE_NCURSES_CURSES_H = "0"
    HAVE_NCURSES_H = "1"
    HAVE_NCURSES_NCURSES_H = "0"
    HAVE_NCURSES_PANEL_H = "0"
    HAVE_NDBM_H = "0"
    HAVE_NDIR_H = "0"
    HAVE_NETCAN_CAN_H = "0"
    HAVE_NETDB_H = "1"
    HAVE_NETINET_IN_H = "1"
    HAVE_NETLINK_NETLINK_H = "0"
    HAVE_NETPACKET_PACKET_H = "1"
    HAVE_NET_ETHERNET_H = "1"
    HAVE_NET_IF_H = "1"
    HAVE_NICE = "1"
    HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION = "0"
    HAVE_OPENAT = "1"
    HAVE_OPENDIR = "1"
    HAVE_OPENPTY = "1"
    HAVE_PANEL = "0"
    HAVE_PANELW = "1"
    HAVE_PANEL_H = "1"
    HAVE_PATHCONF = "1"
    HAVE_PAUSE = "1"
    HAVE_PIPE = "1"
    HAVE_PIPE2 = "1"
    HAVE_PLOCK = "0"
    HAVE_POLL = "1"
    HAVE_POLL_H = "1"
    HAVE_POSIX_FADVISE = "1"
    HAVE_POSIX_FALLOCATE = "1"
    HAVE_POSIX_OPENPT = "1"
    HAVE_POSIX_SPAWN = "1"
    HAVE_POSIX_SPAWNP = "1"
    HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSEFROM_NP = "1"
    HAVE_PREAD = "1"
    HAVE_PREADV = "1"
    HAVE_PREADV2 = "1"
    HAVE_PRLIMIT = "1"
    HAVE_PROCESS_H = "0"
    HAVE_PROCESS_VM_READV = "1"
    HAVE_PROTOTYPES = "1"
    HAVE_PTHREAD_CONDATTR_SETCLOCK = "1"
    HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE_NP = "0"
    HAVE_PTHREAD_DESTRUCTOR = "0"
    HAVE_PTHREAD_GETCPUCLOCKID = "1"
    HAVE_PTHREAD_H = "1"
    HAVE_PTHREAD_INIT = "0"
    HAVE_PTHREAD_KILL = "1"
    HAVE_PTHREAD_SIGMASK = "1"
    HAVE_PTHREAD_STUBS = "0"
    HAVE_PTSNAME = "1"
    HAVE_PTSNAME_R = "1"
    HAVE_PTY_H = "1"
    HAVE_PWRITE = "1"
    HAVE_PWRITEV = "1"
    HAVE_PWRITEV2 = "1"
    HAVE_READLINE_READLINE_H = "0"
    HAVE_READLINK = "1"
    HAVE_READLINKAT = "1"
    HAVE_READV = "1"
    HAVE_REALPATH = "1"
    HAVE_RECVFROM = "1"
    HAVE_RENAMEAT = "1"
    HAVE_RL_APPEND_HISTORY = "1"
    HAVE_RL_CATCH_SIGNAL = "1"
    HAVE_RL_COMPDISP_FUNC_T = "1"
    HAVE_RL_COMPLETION_APPEND_CHARACTER = "1"
    HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK = "1"
    HAVE_RL_COMPLETION_MATCHES = "1"
    HAVE_RL_COMPLETION_SUPPRESS_APPEND = "1"
    HAVE_RL_PRE_INPUT_HOOK = "1"
    HAVE_RL_RESIZE_TERMINAL = "1"
    HAVE_RTPSPAWN = "0"
    HAVE_SCHED_GET_PRIORITY_MAX = "1"
    HAVE_SCHED_H = "1"
    HAVE_SCHED_RR_GET_INTERVAL = "1"
    HAVE_SCHED_SETAFFINITY = "1"
    HAVE_SCHED_SETPARAM = "1"
    HAVE_SCHED_SETSCHEDULER = "1"
    HAVE_SEM_CLOCKWAIT = "1"
    HAVE_SEM_GETVALUE = "1"
    HAVE_SEM_OPEN = "1"
    HAVE_SEM_TIMEDWAIT = "1"
    HAVE_SEM_UNLINK = "1"
    HAVE_SENDFILE = "1"
    HAVE_SENDTO = "1"
    HAVE_SETEGID = "1"
    HAVE_SETEUID = "1"
    HAVE_SETGID = "1"
    HAVE_SETGROUPS = "1"
    HAVE_SETHOSTNAME = "1"
    HAVE_SETITIMER = "1"
    HAVE_SETJMP_H = "1"
    HAVE_SETLOCALE = "1"
    HAVE_SETNS = "1"
    HAVE_SETPGID = "1"
    HAVE_SETPGRP = "1"
    HAVE_SETPRIORITY = "1"
    HAVE_SETREGID = "1"
    HAVE_SETRESGID = "1"
    HAVE_SETRESUID = "1"
    HAVE_SETREUID = "1"
    HAVE_SETSID = "1"
    HAVE_SETSOCKOPT = "1"
    HAVE_SETUID = "1"
    HAVE_SETVBUF = "1"
    HAVE_SHADOW_H = "1"
    HAVE_SHM_OPEN = "1"
    HAVE_SHM_UNLINK = "1"
    HAVE_SHUTDOWN = "1"
    HAVE_SIGACTION = "1"
    HAVE_SIGALTSTACK = "1"
    HAVE_SIGFILLSET = "1"
    HAVE_SIGINFO_T_SI_BAND = "1"
    HAVE_SIGINTERRUPT = "1"
    HAVE_SIGNAL_H = "1"
    HAVE_SIGPENDING = "1"
    HAVE_SIGRELSE = "1"
    HAVE_SIGTIMEDWAIT = "1"
    HAVE_SIGWAIT = "1"
    HAVE_SIGWAITINFO = "1"
    HAVE_SNPRINTF = "1"
    HAVE_SOCKADDR_ALG = "1"
    HAVE_SOCKADDR_SA_LEN = "0"
    HAVE_SOCKADDR_STORAGE = "1"
    HAVE_SOCKET = "1"
    HAVE_SOCKETPAIR = "1"
    HAVE_SOCKLEN_T = "1"
    HAVE_SPAWN_H = "1"
    HAVE_SPLICE = "1"
    HAVE_SSIZE_T = "1"
    HAVE_STATVFS = "1"
    HAVE_STAT_TV_NSEC = "1"
    HAVE_STAT_TV_NSEC2 = "0"
    HAVE_STDINT_H = "1"
    HAVE_STDIO_H = "1"
    HAVE_STDLIB_H = "1"
    HAVE_STD_ATOMIC = "1"
    HAVE_STRFTIME = "1"
    HAVE_STRINGS_H = "1"
    HAVE_STRING_H = "1"
    HAVE_STRLCPY = "1"
    HAVE_STROPTS_H = "0"
    HAVE_STRSIGNAL = "1"
    HAVE_STRUCT_PASSWD_PW_GECOS = "1"
    HAVE_STRUCT_PASSWD_PW_PASSWD = "1"
    HAVE_STRUCT_STAT_ST_BIRTHTIME = "0"
    HAVE_STRUCT_STAT_ST_BLKSIZE = "1"
    HAVE_STRUCT_STAT_ST_BLOCKS = "1"
    HAVE_STRUCT_STAT_ST_FLAGS = "0"
    HAVE_STRUCT_STAT_ST_GEN = "0"
    HAVE_STRUCT_STAT_ST_RDEV = "1"
    HAVE_STRUCT_TM_TM_ZONE = "1"
    HAVE_SYMLINK = "1"
    HAVE_SYMLINKAT = "1"
    HAVE_SYNC = "1"
    HAVE_SYSCONF = "1"
    HAVE_SYSEXITS_H = "1"
    HAVE_SYSLOG_H = "1"
    HAVE_SYSTEM = "1"
    HAVE_SYS_AUDIOIO_H = "0"
    HAVE_SYS_AUXV_H = "1"
    HAVE_SYS_BSDTTY_H = "0"
    HAVE_SYS_DEVPOLL_H = "0"
    HAVE_SYS_DIR_H = "0"
    HAVE_SYS_ENDIAN_H = "0"
    HAVE_SYS_EPOLL_H = "1"
    HAVE_SYS_EVENTFD_H = "1"
    HAVE_SYS_EVENT_H = "0"
    HAVE_SYS_FILE_H = "1"
    HAVE_SYS_IOCTL_H = "1"
    HAVE_SYS_KERN_CONTROL_H = "0"
    HAVE_SYS_LOADAVG_H = "0"
    HAVE_SYS_LOCK_H = "0"
    HAVE_SYS_MEMFD_H = "0"
    HAVE_SYS_MKDEV_H = "0"
    HAVE_SYS_MMAN_H = "1"
    HAVE_SYS_MODEM_H = "0"
    HAVE_SYS_NDIR_H = "0"
    HAVE_SYS_PARAM_H = "1"
    HAVE_SYS_POLL_H = "1"
    HAVE_SYS_RANDOM_H = "1"
    HAVE_SYS_RESOURCE_H = "1"
    HAVE_SYS_SELECT_H = "1"
    HAVE_SYS_SENDFILE_H = "1"
    HAVE_SYS_SOCKET_H = "1"
    HAVE_SYS_SOUNDCARD_H = "1"
    HAVE_SYS_STATVFS_H = "1"
    HAVE_SYS_STAT_H = "1"
    HAVE_SYS_SYSCALL_H = "1"
    HAVE_SYS_SYSMACROS_H = "1"
    HAVE_SYS_SYS_DOMAIN_H = "0"
    HAVE_SYS_TERMIO_H = "0"
    HAVE_SYS_TIMERFD_H = "1"
    HAVE_SYS_TIMES_H = "1"
    HAVE_SYS_TIME_H = "1"
    HAVE_SYS_TYPES_H = "1"
    HAVE_SYS_UIO_H = "1"
    HAVE_SYS_UN_H = "1"
    HAVE_SYS_UTSNAME_H = "1"
    HAVE_SYS_WAIT_H = "1"
    HAVE_SYS_XATTR_H = "1"
    HAVE_TCGETPGRP = "1"
    HAVE_TCSETPGRP = "1"
    HAVE_TEMPNAM = "1"
    HAVE_TERMIOS_H = "1"
    HAVE_TERM_H = "1"
    HAVE_TIMEGM = "1"
    HAVE_TIMERFD_CREATE = "1"
    HAVE_TIMES = "1"
    HAVE_TMPFILE = "1"
    HAVE_TMPNAM = "1"
    HAVE_TMPNAM_R = "1"
    HAVE_TM_ZONE = "1"
    HAVE_TRUNCATE = "1"
    HAVE_TTYNAME = "1"
    HAVE_TZNAME = "0"
    HAVE_UMASK = "1"
    HAVE_UNAME = "1"
    HAVE_UNISTD_H = "1"
    HAVE_UNLINKAT = "1"
    HAVE_UNLOCKPT = "1"
    HAVE_UNSHARE = "1"
    HAVE_USABLE_WCHAR_T = "1"
    HAVE_UTIL_H = "0"
    HAVE_UTIMENSAT = "1"
    HAVE_UTIMES = "1"
    HAVE_UTIME_H = "1"
    HAVE_UTMP_H = "1"
    HAVE_UUID_CREATE = "0"
    HAVE_UUID_ENC_BE = "0"
    HAVE_UUID_GENERATE_TIME_SAFE = "1"
    HAVE_UUID_H = "1"
    HAVE_UUID_UUID_H = "0"
    HAVE_VFORK = "1"
    HAVE_WAIT = "1"
    HAVE_WAIT3 = "1"
    HAVE_WAIT4 = "1"
    HAVE_WAITID = "1"
    HAVE_WAITPID = "1"
    HAVE_WCHAR_H = "1"
    HAVE_WCSCOLL = "1"
    HAVE_WCSFTIME = "1"
    HAVE_WCSXFRM = "1"
    HAVE_WMEMCMP = "1"
    HAVE_WORKING_TZSET = "1"
    HAVE_WRITEV = "1"
    HAVE_ZLIB_COPY = "1"
    HAVE_ZLIB_H = "0"
    HAVE__GETPTY = "0"
    HAVE___UINT128_T = "1"
    HOSTRUNNER = ""
    HOST_GNU_TYPE = "aarch64-unknown-linux-gnu"
    INCLDIRSTOMAKE = "/tmp/python/include /tmp/python/include /tmp/python/include/python3.13 /tmp/python/include/python3.13"
    INCLUDEDIR = "/tmp/python/include"
    INCLUDEPY = "/tmp/python/include/python3.13"
    INSTALL = "/usr/bin/install -c"
    INSTALL_DATA = "/usr/bin/install -c -m 644"
    INSTALL_MIMALLOC = "yes"
    INSTALL_PROGRAM = "/usr/bin/install -c"
    INSTALL_SCRIPT = "/usr/bin/install -c"
    INSTALL_SHARED = "/usr/bin/install -c -m 755"
    INSTSONAME = "libpython3.13.so.1.0"
    IO_H = "Modules/_io/_iomodule.h"
    IO_OBJS = "\"
    IPHONEOS_DEPLOYMENT_TARGET = ""
    JIT_DEPS = "\"
    LDCXXSHARED = "g++ -shared -Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -Wl,-z,relro -Wl,--strip-all"
    LDFLAGS = "-Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -Wl,-z,relro -Wl,--strip-all"
    LDLIBRARY = "libpython3.13.so"
    LDLIBRARYDIR = ""
    LDSHARED = "gcc -shared -Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -Wl,-z,relro -Wl,--strip-all"
    LDVERSION = "3.13"
    LIBC = ""
    LIBDEST = "/tmp/python/lib/python3.13"
    LIBDIR = "/tmp/python/lib"
    LIBEXPAT_A = "Modules/expat/libexpat.a"
    LIBEXPAT_CFLAGS = "-fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall   -g -O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -ffile-prefix-map=/tmp/src=. -flto=auto -ffat-lto-objects -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -fno-semantic-interposition -flto -fuse-linker-plugin -ffat-lto-objects -flto-partition=none -g -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -fprofile-use -fprofile-correction -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -fPIC -fPIC"
    LIBEXPAT_HEADERS = "\"
    LIBEXPAT_OBJS = "\"
    LIBHACL_CFLAGS = "-I./Modules/_hacl/include -D_BSD_SOURCE -D_DEFAULT_SOURCE -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall   -g -O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -ffile-prefix-map=/tmp/src=. -flto=auto -ffat-lto-objects -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -fno-semantic-interposition -flto -fuse-linker-plugin -ffat-lto-objects -flto-partition=none -g -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -fprofile-use -fprofile-correction -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -fPIC -fPIC"
    LIBHACL_HEADERS = "\"
    LIBHACL_SHA2_A = "Modules/_hacl/libHacl_Hash_SHA2.a"
    LIBHACL_SHA2_HEADERS = "\"
    LIBHACL_SHA2_OBJS = "\"
    LIBM = "-lm"
    LIBMPDEC_A = "Modules/_decimal/libmpdec/libmpdec.a"
    LIBMPDEC_CFLAGS = "-I./Modules/_decimal/libmpdec -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall   -g -O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -ffile-prefix-map=/tmp/src=. -flto=auto -ffat-lto-objects -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -fno-semantic-interposition -flto -fuse-linker-plugin -ffat-lto-objects -flto-partition=none -g -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -fprofile-use -fprofile-correction -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -fPIC -fPIC"
    LIBMPDEC_HEADERS = "\"
    LIBMPDEC_OBJS = "\"
    LIBOBJDIR = "Python/"
    LIBOBJS = ""
    LIBPC = "/tmp/python/lib/pkgconfig"
    LIBPL = "/tmp/python/lib/python3.13/config-3.13-aarch64-linux-gnu"
    LIBPYTHON = ""
    LIBRARY = "libpython3.13.a"
    LIBRARY_DEPS = "libpython3.13.so libpython3.so"
    LIBRARY_OBJS = "\"
    LIBRARY_OBJS_OMIT_FROZEN = "\"
    LIBS = "-ldl"
    LIBSUBDIRS = "asyncio \"
    LINKCC = "gcc"
    LINKFORSHARED = "-Xlinker -export-dynamic"
    LINK_PYTHON_DEPS = "libpython3.13.so libpython3.so"
    LINK_PYTHON_OBJS = "-L. -lpython3.13"
    LIPO_32BIT_FLAGS = ""
    LIPO_INTEL64_FLAGS = ""
    LLVM_PROF_ERR = "no"
    LLVM_PROF_FILE = ""
    LLVM_PROF_MERGER = "true"
    LN = "ln"
    LOCALMODLIBS = ""
    MACHDEP = "linux"
    MACHDEP_OBJS = ""
    MACHDESTLIB = "/tmp/python/lib/python3.13"
    MACOSX_DEPLOYMENT_TARGET = ""
    MAJOR_IN_MKDEV = "0"
    MAJOR_IN_SYSMACROS = "1"
    MAKESETUP = "./Modules/makesetup"
    MANDIR = "/tmp/python/share/man"
    MIMALLOC_HEADERS = "\"
    MKDIR_P = "/usr/bin/mkdir -p"
    MODBUILT_NAMES = "array  _asyncio  _bisect  _contextvars  _csv  _heapq  _json  _lsprof  _opcode  _pickle  _queue  _random  _struct  _interpreters  _interpchannels  _interpqueues  _zoneinfo  math  cmath  _statistics  _datetime  _decimal  binascii  _bz2  _lzma  zlib  _dbm  _gdbm  readline  _md5  _sha1  _sha2  _sha3  _blake2  pyexpat  _elementtree  _codecs_cn  _codecs_hk  _codecs_iso2022  _codecs_jp  _codecs_kr  _codecs_tw  _multibytecodec  unicodedata  fcntl  grp  mmap  _posixsubprocess  resource  select  _socket  syslog  termios  _posixshmem  _multiprocessing  _ctypes  _curses  _curses_panel  _sqlite3  _ssl  _hashlib  _uuid  atexit  faulthandler  posix  _signal  _tracemalloc  _suggestions  _codecs  _collections  errno  _io  itertools  _sre  _sysconfig  _thread  time  _typing  _weakref  _abc  _functools  _locale  _operator  _stat  _symtable  pwd"
    MODDISABLED_NAMES = ""
    MODLIBS = ""
    MODOBJS = "Modules/atexitmodule.o  Modules/faulthandler.o  Modules/posixmodule.o  Modules/signalmodule.o  Modules/_tracemalloc.o  Modules/_suggestions.o  Modules/_codecsmodule.o  Modules/_collectionsmodule.o  Modules/errnomodule.o  Modules/_io/_iomodule.o Modules/_io/iobase.o Modules/_io/fileio.o Modules/_io/bytesio.o Modules/_io/bufferedio.o Modules/_io/textio.o Modules/_io/stringio.o  Modules/itertoolsmodule.o  Modules/_sre/sre.o  Modules/_sysconfig.o  Modules/_threadmodule.o  Modules/timemodule.o  Modules/_typingmodule.o  Modules/_weakref.o  Modules/_abc.o  Modules/_functoolsmodule.o  Modules/_localemodule.o  Modules/_operator.o  Modules/_stat.o  Modules/symtablemodule.o  Modules/pwdmodule.o"
    MODSHARED_NAMES = "array _asyncio _bisect _contextvars _csv _heapq _json _lsprof _opcode _pickle _queue _random _struct _interpreters _interpchannels _interpqueues _zoneinfo math cmath _statistics _datetime _decimal binascii _bz2 _lzma zlib _dbm _gdbm readline _md5 _sha1 _sha2 _sha3 _blake2 pyexpat _elementtree _codecs_cn _codecs_hk _codecs_iso2022 _codecs_jp _codecs_kr _codecs_tw _multibytecodec unicodedata fcntl grp mmap _posixsubprocess resource select _socket syslog termios _posixshmem _multiprocessing _ctypes _curses _curses_panel _sqlite3 _ssl _hashlib _uuid"
    MODULE_ARRAY_STATE = "yes"
    MODULE_ATEXIT_LDFLAGS = ""
    MODULE_BINASCII_CFLAGS = "-DUSE_ZLIB_CRC32"
    MODULE_BINASCII_LDFLAGS = "-lz"
    MODULE_BINASCII_STATE = "yes"
    MODULE_CMATH_DEPS = "./Modules/_math.h"
    MODULE_CMATH_LDFLAGS = "-lm"
    MODULE_CMATH_STATE = "yes"
    MODULE_DEPS_SHARED = "Modules/config.c"
    MODULE_DEPS_STATIC = "Modules/config.c"
    MODULE_ERRNO_LDFLAGS = ""
    MODULE_FAULTHANDLER_LDFLAGS = ""
    MODULE_FCNTL_LDFLAGS = ""
    MODULE_FCNTL_STATE = "yes"
    MODULE_GRP_STATE = "yes"
    MODULE_ITERTOOLS_LDFLAGS = ""
    MODULE_MATH_DEPS = "./Modules/_math.h"
    MODULE_MATH_LDFLAGS = "-lm"
    MODULE_MATH_STATE = "yes"
    MODULE_MMAP_STATE = "yes"
    MODULE_OBJS = "\"
    MODULE_POSIX_LDFLAGS = ""
    MODULE_PWD_LDFLAGS = ""
    MODULE_PWD_STATE = "yes"
    MODULE_PYEXPAT_CFLAGS = ""
    MODULE_PYEXPAT_DEPS = ""
    MODULE_PYEXPAT_LDFLAGS = "-lexpat"
    MODULE_PYEXPAT_STATE = "yes"
    MODULE_READLINE_CFLAGS = "-D_DEFAULT_SOURCE"
    MODULE_READLINE_LDFLAGS = "-lreadline"
    MODULE_READLINE_STATE = "yes"
    MODULE_RESOURCE_STATE = "yes"
    MODULE_SELECT_STATE = "yes"
    MODULE_SYSLOG_STATE = "yes"
    MODULE_TERMIOS_STATE = "yes"
    MODULE_TIME_LDFLAGS = ""
    MODULE_TIME_STATE = "yes"
    MODULE_UNICODEDATA_DEPS = "./Modules/unicodedata_db.h ./Modules/unicodename_db.h"
    MODULE_UNICODEDATA_STATE = "yes"
    MODULE_XXLIMITED_35_STATE = "disabled"
    MODULE_XXLIMITED_STATE = "disabled"
    MODULE_XXSUBTYPE_STATE = "disabled"
    MODULE_ZLIB_CFLAGS = ""
    MODULE_ZLIB_LDFLAGS = "-lz"
    MODULE_ZLIB_STATE = "yes"
    MODULE__ABC_LDFLAGS = ""
    MODULE__ASYNCIO_STATE = "yes"
    MODULE__BISECT_STATE = "yes"
    MODULE__BLAKE2_CFLAGS = ""
    MODULE__BLAKE2_DEPS = "./Modules/_blake2/impl/blake2-config.h ./Modules/_blake2/impl/blake2-impl.h ./Modules/_blake2/impl/blake2.h ./Modules/_blake2/impl/blake2b-load-sse2.h ./Modules/_blake2/impl/blake2b-load-sse41.h ./Modules/_blake2/impl/blake2b-ref.c ./Modules/_blake2/impl/blake2b-round.h ./Modules/_blake2/impl/blake2b.c ./Modules/_blake2/impl/blake2s-load-sse2.h ./Modules/_blake2/impl/blake2s-load-sse41.h ./Modules/_blake2/impl/blake2s-load-xop.h ./Modules/_blake2/impl/blake2s-ref.c ./Modules/_blake2/impl/blake2s-round.h ./Modules/_blake2/impl/blake2s.c ./Modules/_blake2/blake2module.h ./Modules/hashlib.h"
    MODULE__BLAKE2_LDFLAGS = ""
    MODULE__BLAKE2_STATE = "yes"
    MODULE__BZ2_CFLAGS = ""
    MODULE__BZ2_LDFLAGS = "-lbz2"
    MODULE__BZ2_STATE = "yes"
    MODULE__CODECS_CN_DEPS = "./Modules/cjkcodecs/mappings_cn.h ./Modules/cjkcodecs/multibytecodec.h ./Modules/cjkcodecs/cjkcodecs.h"
    MODULE__CODECS_CN_STATE = "yes"
    MODULE__CODECS_HK_DEPS = "./Modules/cjkcodecs/mappings_hk.h  ./Modules/cjkcodecs/multibytecodec.h ./Modules/cjkcodecs/cjkcodecs.h"
    MODULE__CODECS_HK_STATE = "yes"
    MODULE__CODECS_ISO2022_DEPS = "./Modules/cjkcodecs/mappings_jisx0213_pair.h ./Modules/cjkcodecs/alg_jisx0201.h ./Modules/cjkcodecs/emu_jisx0213_2000.h ./Modules/cjkcodecs/multibytecodec.h ./Modules/cjkcodecs/cjkcodecs.h"
    MODULE__CODECS_ISO2022_STATE = "yes"
    MODULE__CODECS_JP_DEPS = "./Modules/cjkcodecs/mappings_jisx0213_pair.h ./Modules/cjkcodecs/alg_jisx0201.h ./Modules/cjkcodecs/emu_jisx0213_2000.h ./Modules/cjkcodecs/mappings_jp.h ./Modules/cjkcodecs/multibytecodec.h ./Modules/cjkcodecs/cjkcodecs.h"
    MODULE__CODECS_JP_STATE = "yes"
    MODULE__CODECS_KR_DEPS = "./Modules/cjkcodecs/mappings_kr.h ./Modules/cjkcodecs/multibytecodec.h ./Modules/cjkcodecs/cjkcodecs.h"
    MODULE__CODECS_KR_STATE = "yes"
    MODULE__CODECS_LDFLAGS = ""
    MODULE__CODECS_TW_DEPS = "./Modules/cjkcodecs/mappings_tw.h ./Modules/cjkcodecs/multibytecodec.h ./Modules/cjkcodecs/cjkcodecs.h"
    MODULE__CODECS_TW_STATE = "yes"
    MODULE__COLLECTIONS_LDFLAGS = ""
    MODULE__CONTEXTVARS_STATE = "yes"
    MODULE__CSV_STATE = "yes"
    MODULE__CTYPES_CFLAGS = "-fno-strict-overflow"
    MODULE__CTYPES_DEPS = "./Modules/_ctypes/ctypes.h"
    MODULE__CTYPES_LDFLAGS = "-lffi  -ldl"
    MODULE__CTYPES_MALLOC_CLOSURE = ""
    MODULE__CTYPES_STATE = "yes"
    MODULE__CTYPES_TEST_STATE = "disabled"
    MODULE__CURSES_CFLAGS = "-D_DEFAULT_SOURCE"
    MODULE__CURSES_DEPS = "./Include/py_curses.h"
    MODULE__CURSES_LDFLAGS = "-lncursesw -ltinfo"
    MODULE__CURSES_PANEL_CFLAGS = "-D_DEFAULT_SOURCE  -D_DEFAULT_SOURCE"
    MODULE__CURSES_PANEL_DEPS = "./Include/py_curses.h"
    MODULE__CURSES_PANEL_LDFLAGS = "-lpanelw  -lncursesw -ltinfo"
    MODULE__CURSES_PANEL_STATE = "yes"
    MODULE__CURSES_STATE = "yes"
    MODULE__DATETIME_DEPS = "./Include/datetime.h"
    MODULE__DATETIME_LDFLAGS = "-lm"
    MODULE__DATETIME_STATE = "yes"
    MODULE__DBM_CFLAGS = "-DUSE_BERKDB"
    MODULE__DBM_LDFLAGS = "-ldb"
    MODULE__DBM_STATE = "yes"
    MODULE__DECIMAL_CFLAGS = "-I./Modules/_decimal/libmpdec -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1"
    MODULE__DECIMAL_DEPS = "./Modules/_decimal/docstrings.h \ Modules/_decimal/libmpdec/libmpdec.a"
    MODULE__DECIMAL_LDFLAGS = "-lm Modules/_decimal/libmpdec/libmpdec.a"
    MODULE__DECIMAL_STATE = "yes"
    MODULE__ELEMENTTREE_CFLAGS = ""
    MODULE__ELEMENTTREE_DEPS = "./Modules/pyexpat.c"
    MODULE__ELEMENTTREE_STATE = "yes"
    MODULE__FUNCTOOLS_LDFLAGS = ""
    MODULE__GDBM_CFLAGS = ""
    MODULE__GDBM_LDFLAGS = "-lgdbm"
    MODULE__GDBM_STATE = "yes"
    MODULE__HASHLIB_CFLAGS = ""
    MODULE__HASHLIB_DEPS = "./Modules/hashlib.h"
    MODULE__HASHLIB_LDFLAGS = "-lcrypto"
    MODULE__HASHLIB_STATE = "yes"
    MODULE__HEAPQ_STATE = "yes"
    MODULE__INTERPCHANNELS_STATE = "yes"
    MODULE__INTERPQUEUES_STATE = "yes"
    MODULE__INTERPRETERS_STATE = "yes"
    MODULE__IO_CFLAGS = "-I./Modules/_io"
    MODULE__IO_DEPS = "./Modules/_io/_iomodule.h"
    MODULE__IO_LDFLAGS = ""
    MODULE__IO_STATE = "yes"
    MODULE__JSON_STATE = "yes"
    MODULE__LOCALE_LDFLAGS = ""
    MODULE__LSPROF_STATE = "yes"
    MODULE__LZMA_CFLAGS = ""
    MODULE__LZMA_LDFLAGS = "-llzma"
    MODULE__LZMA_STATE = "yes"
    MODULE__MD5_CFLAGS = "-I./Modules/_hacl/include -I./Modules/_hacl/internal -D_BSD_SOURCE -D_DEFAULT_SOURCE"
    MODULE__MD5_DEPS = "./Modules/hashlib.h \ Modules/_hacl/Hacl_Hash_MD5.h Modules/_hacl/Hacl_Hash_MD5.c"
    MODULE__MD5_STATE = "yes"
    MODULE__MULTIBYTECODEC_DEPS = "./Modules/cjkcodecs/multibytecodec.h"
    MODULE__MULTIBYTECODEC_STATE = "yes"
    MODULE__MULTIPROCESSING_CFLAGS = "-I./Modules/_multiprocessing"
    MODULE__MULTIPROCESSING_STATE = "yes"
    MODULE__OPCODE_STATE = "yes"
    MODULE__OPERATOR_LDFLAGS = ""
    MODULE__PICKLE_STATE = "yes"
    MODULE__POSIXSHMEM_CFLAGS = "-I./Modules/_multiprocessing"
    MODULE__POSIXSHMEM_LDFLAGS = ""
    MODULE__POSIXSHMEM_STATE = "yes"
    MODULE__POSIXSUBPROCESS_STATE = "yes"
    MODULE__QUEUE_STATE = "yes"
    MODULE__RANDOM_STATE = "yes"
    MODULE__SCPROXY_STATE = "n/a"
    MODULE__SHA1_CFLAGS = "-I./Modules/_hacl/include -I./Modules/_hacl/internal -D_BSD_SOURCE -D_DEFAULT_SOURCE"
    MODULE__SHA1_DEPS = "./Modules/hashlib.h \ Modules/_hacl/Hacl_Hash_SHA1.h Modules/_hacl/Hacl_Hash_SHA1.c"
    MODULE__SHA1_STATE = "yes"
    MODULE__SHA2_CFLAGS = "-I./Modules/_hacl/include -I./Modules/_hacl/internal -D_BSD_SOURCE -D_DEFAULT_SOURCE"
    MODULE__SHA2_DEPS = "./Modules/hashlib.h \ Modules/_hacl/libHacl_Hash_SHA2.a"
    MODULE__SHA2_STATE = "yes"
    MODULE__SHA3_DEPS = "./Modules/hashlib.h \ Modules/_hacl/Hacl_Hash_SHA3.h Modules/_hacl/Hacl_Hash_SHA3.c"
    MODULE__SHA3_STATE = "yes"
    MODULE__SIGNAL_LDFLAGS = ""
    MODULE__SOCKET_DEPS = "./Modules/socketmodule.h ./Modules/addrinfo.h ./Modules/getaddrinfo.c ./Modules/getnameinfo.c"
    MODULE__SOCKET_STATE = "yes"
    MODULE__SQLITE3_CFLAGS = "-I./Modules/_sqlite"
    MODULE__SQLITE3_DEPS = "./Modules/_sqlite/connection.h ./Modules/_sqlite/cursor.h ./Modules/_sqlite/microprotocols.h ./Modules/_sqlite/module.h ./Modules/_sqlite/prepare_protocol.h ./Modules/_sqlite/row.h ./Modules/_sqlite/util.h"
    MODULE__SQLITE3_LDFLAGS = "-lsqlite3"
    MODULE__SQLITE3_STATE = "yes"
    MODULE__SRE_LDFLAGS = ""
    MODULE__SSL_CFLAGS = ""
    MODULE__SSL_DEPS = "./Modules/_ssl.h ./Modules/_ssl/cert.c ./Modules/_ssl/debughelpers.c ./Modules/_ssl/misc.c ./Modules/_ssl_data_111.h ./Modules/_ssl_data_300.h ./Modules/socketmodule.h"
    MODULE__SSL_LDFLAGS = "-lssl -lcrypto"
    MODULE__SSL_STATE = "yes"
    MODULE__STATISTICS_LDFLAGS = "-lm"
    MODULE__STATISTICS_STATE = "yes"
    MODULE__STAT_LDFLAGS = ""
    MODULE__STRUCT_STATE = "yes"
    MODULE__SUGGESTIONS_LDFLAGS = ""
    MODULE__SYMTABLE_LDFLAGS = ""
    MODULE__SYSCONFIG_LDFLAGS = ""
    MODULE__TESTBUFFER_STATE = "disabled"
    MODULE__TESTCAPI_DEPS = "./Modules/_testcapi/parts.h ./Modules/_testcapi/util.h"
    MODULE__TESTCAPI_STATE = "disabled"
    MODULE__TESTCLINIC_LIMITED_STATE = "disabled"
    MODULE__TESTCLINIC_STATE = "disabled"
    MODULE__TESTEXTERNALINSPECTION_STATE = "disabled"
    MODULE__TESTIMPORTMULTIPLE_STATE = "disabled"
    MODULE__TESTINTERNALCAPI_DEPS = "./Modules/_testinternalcapi/parts.h"
    MODULE__TESTINTERNALCAPI_STATE = "disabled"
    MODULE__TESTLIMITEDCAPI_DEPS = "./Modules/_testlimitedcapi/testcapi_long.h ./Modules/_testlimitedcapi/parts.h ./Modules/_testlimitedcapi/util.h"
    MODULE__TESTLIMITEDCAPI_STATE = "disabled"
    MODULE__TESTMULTIPHASE_STATE = "disabled"
    MODULE__TESTSINGLEPHASE_STATE = "disabled"
    MODULE__THREAD_LDFLAGS = ""
    MODULE__TKINTER_STATE = "missing"
    MODULE__TRACEMALLOC_LDFLAGS = ""
    MODULE__TYPING_LDFLAGS = ""
    MODULE__TYPING_STATE = "yes"
    MODULE__UUID_CFLAGS = "-I/usr/include/uuid"
    MODULE__UUID_LDFLAGS = "-luuid"
    MODULE__UUID_STATE = "yes"
    MODULE__WEAKREF_LDFLAGS = ""
    MODULE__XXTESTFUZZ_STATE = "disabled"
    MODULE__ZONEINFO_STATE = "yes"
    MULTIARCH = "aarch64-linux-gnu"
    MULTIARCH_CPPFLAGS = "-DMULTIARCH=\"aarch64-linux-gnu\""
    MVWDELCH_IS_EXPRESSION = "1"
    NO_AS_NEEDED = "-Wl,--no-as-needed"
    OBJECT_OBJS = "\"
    OPT = "-DNDEBUG -g -O3 -Wall"
    PACKAGE_BUGREPORT = "0"
    PACKAGE_NAME = "0"
    PACKAGE_STRING = "0"
    PACKAGE_TARNAME = "0"
    PACKAGE_URL = "0"
    PACKAGE_VERSION = "0"
    PARSER_HEADERS = "\"
    PARSER_OBJS = "\ \ \ Parser/myreadline.o"
    PEGEN_HEADERS = "\"
    PEGEN_OBJS = "\"
    PGO_PROF_GEN_FLAG = "-fprofile-generate"
    PGO_PROF_USE_FLAG = "-fprofile-use -fprofile-correction"
    PLATLIBDIR = "lib"
    POBJS = "\"
    POSIX_SEMAPHORES_NOT_ENABLED = "0"
    PROFILE_TASK = "-m test --pgo --timeout="
    PTHREAD_KEY_T_IS_COMPATIBLE_WITH_INT = "1"
    PTHREAD_SYSTEM_SCHED_SUPPORTED = "1"
    PURIFY = ""
    PY3LIBRARY = "libpython3.so"
    PYLONG_BITS_IN_DIGIT = "0"
    PYTHON = "python"
    PYTHONFRAMEWORK = ""
    PYTHONFRAMEWORKDIR = "no-framework"
    PYTHONFRAMEWORKINSTALLDIR = ""
    PYTHONFRAMEWORKINSTALLNAMEPREFIX = ""
    PYTHONFRAMEWORKPREFIX = ""
    PYTHONPATH = ""
    PYTHON_FOR_BUILD = "./python -E"
    PYTHON_FOR_BUILD_DEPS = "python"
    PYTHON_FOR_FREEZE = "./_bootstrap_python"
    PYTHON_FOR_REGEN = ""
    PYTHON_HEADERS = "\"
    PYTHON_OBJS = "\"
    PY_BUILTIN_HASHLIB_HASHES = ""md5,sha1,sha2,sha3,blake2""
    PY_BUILTIN_MODULE_CFLAGS = "-fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall   -g -O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -ffile-prefix-map=/tmp/src=. -flto=auto -ffat-lto-objects -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -fno-semantic-interposition -flto -fuse-linker-plugin -ffat-lto-objects -flto-partition=none -g -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -fprofile-use -fprofile-correction -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -fPIC -DPy_BUILD_CORE_BUILTIN"
    PY_CFLAGS = "-fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall   -g -O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -ffile-prefix-map=/tmp/src=. -flto=auto -ffat-lto-objects -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard"
    PY_CFLAGS_NODIST = "-fno-semantic-interposition -flto -fuse-linker-plugin -ffat-lto-objects -flto-partition=none -g -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -fprofile-use -fprofile-correction -I./Include/internal -I./Include/internal/mimalloc"
    PY_COERCE_C_LOCALE = "1"
    PY_CORE_CFLAGS = "-fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall   -g -O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -ffile-prefix-map=/tmp/src=. -flto=auto -ffat-lto-objects -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -fno-semantic-interposition -flto -fuse-linker-plugin -ffat-lto-objects -flto-partition=none -g -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -fprofile-use -fprofile-correction -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -fPIC -DPy_BUILD_CORE"
    PY_CORE_LDFLAGS = "-Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -Wl,-z,relro -Wl,--strip-all -fno-semantic-interposition -flto -fuse-linker-plugin -ffat-lto-objects -flto-partition=none -g"
    PY_CPPFLAGS = "-I. -I./Include"
    PY_ENABLE_SHARED = "1"
    PY_HAVE_PERF_TRAMPOLINE = "1"
    PY_LDFLAGS = "-Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -Wl,-z,relro -Wl,--strip-all"
    PY_LDFLAGS_NODIST = "-fno-semantic-interposition -flto -fuse-linker-plugin -ffat-lto-objects -flto-partition=none -g"
    PY_LDFLAGS_NOLTO = "-Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -Wl,-z,relro -Wl,--strip-all -fno-lto"
    PY_SQLITE_ENABLE_LOAD_EXTENSION = "1"
    PY_SQLITE_HAVE_SERIALIZE = "1"
    PY_SSL_DEFAULT_CIPHERS = "1"
    PY_SSL_DEFAULT_CIPHER_STRING = "0"
    PY_STDMODULE_CFLAGS = "-fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall   -g -O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -ffile-prefix-map=/tmp/src=. -flto=auto -ffat-lto-objects -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -mbranch-protection=standard -fno-semantic-interposition -flto -fuse-linker-plugin -ffat-lto-objects -flto-partition=none -g -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -fprofile-use -fprofile-correction -I./Include/internal -I./Include/internal/mimalloc -I. -I./Include -fPIC"
    PY_SUPPORT_TIER = "2"
    Py_DEBUG = "0"
    Py_ENABLE_SHARED = "1"
    Py_GIL_DISABLED = "0"
    Py_HASH_ALGORITHM = "0"
    Py_RL_STARTUP_HOOK_TAKES_ARGS = "1"
    Py_STATS = "0"
    Py_SUNOS_VERSION = "0"
    Py_TRACE_REFS = "0"
    QUICKTESTOPTS = "-x test_subprocess test_io \"
    READELF = "@READELF@"
    RESSRCDIR = ""
    RETSIGTYPE = "void"
    RUNSHARED = "LD_LIBRARY_PATH=/tmp/src"
    SCRIPTDIR = "/tmp/python/lib"
    SCRIPT_IDLE = "build/scripts-3.13/idle3.13"
    SCRIPT_PYDOC = "build/scripts-3.13/pydoc3.13"
    SETPGRP_HAVE_ARG = "0"
    SHAREDMODS = "Modules/array.cpython-313-aarch64-linux-gnu.so Modules/_asyncio.cpython-313-aarch64-linux-gnu.so Modules/_bisect.cpython-313-aarch64-linux-gnu.so Modules/_contextvars.cpython-313-aarch64-linux-gnu.so Modules/_csv.cpython-313-aarch64-linux-gnu.so Modules/_heapq.cpython-313-aarch64-linux-gnu.so Modules/_json.cpython-313-aarch64-linux-gnu.so Modules/_lsprof.cpython-313-aarch64-linux-gnu.so Modules/_opcode.cpython-313-aarch64-linux-gnu.so Modules/_pickle.cpython-313-aarch64-linux-gnu.so Modules/_queue.cpython-313-aarch64-linux-gnu.so Modules/_random.cpython-313-aarch64-linux-gnu.so Modules/_struct.cpython-313-aarch64-linux-gnu.so Modules/_interpreters.cpython-313-aarch64-linux-gnu.so Modules/_interpchannels.cpython-313-aarch64-linux-gnu.so Modules/_interpqueues.cpython-313-aarch64-linux-gnu.so Modules/_zoneinfo.cpython-313-aarch64-linux-gnu.so Modules/math.cpython-313-aarch64-linux-gnu.so Modules/cmath.cpython-313-aarch64-linux-gnu.so Modules/_statistics.cpython-313-aarch64-linux-gnu.so Modules/_datetime.cpython-313-aarch64-linux-gnu.so Modules/_decimal.cpython-313-aarch64-linux-gnu.so Modules/binascii.cpython-313-aarch64-linux-gnu.so Modules/_bz2.cpython-313-aarch64-linux-gnu.so Modules/_lzma.cpython-313-aarch64-linux-gnu.so Modules/zlib.cpython-313-aarch64-linux-gnu.so Modules/_dbm.cpython-313-aarch64-linux-gnu.so Modules/_gdbm.cpython-313-aarch64-linux-gnu.so Modules/readline.cpython-313-aarch64-linux-gnu.so Modules/_md5.cpython-313-aarch64-linux-gnu.so Modules/_sha1.cpython-313-aarch64-linux-gnu.so Modules/_sha2.cpython-313-aarch64-linux-gnu.so Modules/_sha3.cpython-313-aarch64-linux-gnu.so Modules/_blake2.cpython-313-aarch64-linux-gnu.so Modules/pyexpat.cpython-313-aarch64-linux-gnu.so Modules/_elementtree.cpython-313-aarch64-linux-gnu.so Modules/_codecs_cn.cpython-313-aarch64-linux-gnu.so Modules/_codecs_hk.cpython-313-aarch64-linux-gnu.so Modules/_codecs_iso2022.cpython-313-aarch64-linux-gnu.so Modules/_codecs_jp.cpython-313-aarch64-linux-gnu.so Modules/_codecs_kr.cpython-313-aarch64-linux-gnu.so Modules/_codecs_tw.cpython-313-aarch64-linux-gnu.so Modules/_multibytecodec.cpython-313-aarch64-linux-gnu.so Modules/unicodedata.cpython-313-aarch64-linux-gnu.so Modules/fcntl.cpython-313-aarch64-linux-gnu.so Modules/grp.cpython-313-aarch64-linux-gnu.so Modules/mmap.cpython-313-aarch64-linux-gnu.so Modules/_posixsubprocess.cpython-313-aarch64-linux-gnu.so Modules/resource.cpython-313-aarch64-linux-gnu.so Modules/select.cpython-313-aarch64-linux-gnu.so Modules/_socket.cpython-313-aarch64-linux-gnu.so Modules/syslog.cpython-313-aarch64-linux-gnu.so Modules/termios.cpython-313-aarch64-linux-gnu.so Modules/_posixshmem.cpython-313-aarch64-linux-gnu.so Modules/_multiprocessing.cpython-313-aarch64-linux-gnu.so Modules/_ctypes.cpython-313-aarch64-linux-gnu.so Modules/_curses.cpython-313-aarch64-linux-gnu.so Modules/_curses_panel.cpython-313-aarch64-linux-gnu.so Modules/_sqlite3.cpython-313-aarch64-linux-gnu.so Modules/_ssl.cpython-313-aarch64-linux-gnu.so Modules/_hashlib.cpython-313-aarch64-linux-gnu.so Modules/_uuid.cpython-313-aarch64-linux-gnu.so"
    SHELL = "/bin/sh -e"
    SHLIBS = "-ldl"
    SHLIB_SUFFIX = ".so"
    SIGNED_RIGHT_SHIFT_ZERO_FILLS = "0"
    SITEPATH = ""
    SIZEOF_DOUBLE = "8"
    SIZEOF_FLOAT = "4"
    SIZEOF_FPOS_T = "16"
    SIZEOF_INT = "4"
    SIZEOF_LONG = "8"
    SIZEOF_LONG_DOUBLE = "16"
    SIZEOF_LONG_LONG = "8"
    SIZEOF_OFF_T = "8"
    SIZEOF_PID_T = "4"
    SIZEOF_PTHREAD_KEY_T = "4"
    SIZEOF_PTHREAD_T = "8"
    SIZEOF_SHORT = "2"
    SIZEOF_SIZE_T = "8"
    SIZEOF_TIME_T = "8"
    SIZEOF_UINTPTR_T = "8"
    SIZEOF_VOID_P = "8"
    SIZEOF_WCHAR_T = "4"
    SIZEOF__BOOL = "1"
    SOABI = "cpython-313-aarch64-linux-gnu"
    SRCDIRS = "Modules   Modules/_blake2   Modules/_ctypes   Modules/_decimal   Modules/_decimal/libmpdec   Modules/_hacl   Modules/_io   Modules/_multiprocessing   Modules/_sqlite   Modules/_sre   Modules/_testcapi   Modules/_testinternalcapi   Modules/_testlimitedcapi   Modules/_xxtestfuzz   Modules/cjkcodecs   Modules/expat   Objects   Objects/mimalloc   Objects/mimalloc/prim   Parser   Parser/tokenizer   Parser/lexer   Programs   Python   Python/frozen_modules"
    SRC_GDB_HOOKS = "./Tools/gdb/libpython.py"
    STATIC_LIBPYTHON = "0"
    STDC_HEADERS = "1"
    STRICT_SYSV_CURSES = "/* Don't use ncurses extensions */"
    STRIPFLAG = "-s"
    SUBDIRS = ""
    SUBDIRSTOO = "Include Lib Misc"
    SYSLIBS = "-lm"
    SYS_SELECT_WITH_SYS_TIME = "1"
    TESTOPTS = ""
    TESTPATH = ""
    TESTPYTHON = "LD_LIBRARY_PATH=/tmp/src ./python -E"
    TESTPYTHONOPTS = ""
    TESTRUNNER = "LD_LIBRARY_PATH=/tmp/src ./python -E -m test"
    TESTSUBDIRS = "idlelib/idle_test \"
    TESTTIMEOUT = ""
    TEST_MODULES = "no"
    THREAD_STACK_SIZE = "0"
    TIMEMODULE_LIB = "0"
    TM_IN_SYS_TIME = "0"
    TOKENIZER_HEADERS = "\"
    TOKENIZER_OBJS = "\"
    TZPATH = "/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo"
    UNICODE_DEPS = "\"
    UNIVERSALSDK = ""
    UPDATE_FILE = "./Tools/build/update_file.py"
    USE_COMPUTED_GOTOS = "0"
    VERSION = "3.13"
    WASM_ASSETS_DIR = "./tmp/python"
    WASM_STDLIB = "./tmp/python/lib/python3.13/os.py"
    WHEEL_PKG_DIR = ""
    WINDOW_HAS_FLAGS = "0"
    WITH_DECIMAL_CONTEXTVAR = "1"
    WITH_DOC_STRINGS = "1"
    WITH_DTRACE = "0"
    WITH_DYLD = "0"
    WITH_EDITLINE = "0"
    WITH_FREELISTS = "1"
    WITH_LIBINTL = "0"
    WITH_MIMALLOC = "1"
    WITH_NEXT_FRAMEWORK = "0"
    WITH_PYMALLOC = "1"
    WITH_VALGRIND = "0"
    X87_DOUBLE_ROUNDING = "0"
    XCFOLDER = ""
    XCRESULT = "/aarch64-linux-gnu.xcresult"
    XMLLIBSUBDIRS = "xml xml/dom xml/etree xml/parsers xml/sax"
    abi_thread = ""
    abiflags = ""
    abs_builddir = "/tmp/src"
    abs_srcdir = "/tmp/src"
    base = "/testcase/.heroku/python"
    datarootdir = "/tmp/python/share"
    exec_prefix = "/tmp/python"
    implementation = "Python"
    implementation_lower = "python"
    installed_base = "/testcase/.heroku/python"
    installed_platbase = "/testcase/.heroku/python"
    platbase = "/testcase/.heroku/python"
    platlibdir = "lib"
    prefix = "/tmp/python"
    projectbase = "/testcase/.heroku/python/bin"
    py_version = "3.13.1"
    py_version_nodot = "313"
    py_version_nodot_plat = ""
    py_version_short = "3.13"
    srcdir = "/testcase/.heroku/python/lib/python3.13/config-3.13-aarch64-linux-gnu"
    userbase = "/root/.local"

Example pyproject.toml

[project]
name = "testcase-poetry"
version = "0.1.0"
requires-python = "3.12.*"
dependencies = [
    "typing-extensions"
]

[tool.poetry]
package-mode = false

Poetry Runtime Logs

poetry-runtime.log
RUN poetry install -vvv
The currently activated Python version 3.13.1 is not supported by the project (3.12.*).
Trying to find and use a compatible version. 
[findpython:findpython] Provider AsdfProvider is not available
[findpython:findpython] Provider PyenvProvider is not available
[findpython:findpython] Provider WinregProvider is not available
[findpython:findpython] Provider MacOSProvider is not available
[findpython:findpython] Running script: ['/testcase/.heroku/python/bin/python3.13', '-EsSc', 'import platform; print(platform.python_version())']
[findpython:findpython] Running script: ['/usr/bin/python3.12', '-EsSc', 'import platform; print(platform.python_version())']
[findpython:findpython] Running script: ['/bin/python3.12', '-EsSc', 'import platform; print(platform.python_version())']
[findpython:findpython] Running script: ['/testcase/.heroku/python/bin/python3', '-EsSc', 'import platform; print(platform.python_version())']
[findpython:findpython] Running script: ['/testcase/.heroku/python/bin/python', '-EsSc', 'import platform; print(platform.python_version())']
[findpython:findpython] Running script: ['/usr/bin/python3', '-EsSc', 'import platform; print(platform.python_version())']
[findpython:findpython] Running script: ['/bin/python3', '-EsSc', 'import platform; print(platform.python_version())']
Using python3.12 (3.12.3)
Skipping virtualenv creation, as specified in config file.
Checking keyring availability: Checking if keyring is available
[keyring:keyring.backend] Loading KWallet
[keyring:keyring.backend] Loading SecretService
[keyring:keyring.backend] Loading Windows
[keyring:keyring.backend] Loading chainer
[keyring:keyring.backend] Loading libsecret
[keyring:keyring.backend] Loading macOS
Backend 'fail Keyring' is not suitable
No valid keyring backend was found
Unavailable
Installing dependencies from lock file

Finding the necessary packages for the current system

Package operations: 1 install, 0 updates, 0 removals

- Installing typing-extensions (4.12.2)
Creating new session for pypi.org
[urllib3:urllib3.connectionpool] Starting new HTTPS connection (1): pypi.org:443
[urllib3:urllib3.connectionpool] https://pypi.org:443 "GET /pypi/typing-extensions/4.12.2/json HTTP/1.1" 200 1979
[filelock:filelock] Attempting to acquire lock 281472933620640 on /root/.cache/pypoetry/cache/repositories/PyPI/_http/0/6/f/5/e/06f5e6ff249dca41a6c62a58477ec555f09d75c84fb8ea39a2015bd2.lock
[filelock:filelock] Lock 281472933620640 acquired on /root/.cache/pypoetry/cache/repositories/PyPI/_http/0/6/f/5/e/06f5e6ff249dca41a6c62a58477ec555f09d75c84fb8ea39a2015bd2.lock
[filelock:filelock] Attempting to release lock 281472933620640 on /root/.cache/pypoetry/cache/repositories/PyPI/_http/0/6/f/5/e/06f5e6ff249dca41a6c62a58477ec555f09d75c84fb8ea39a2015bd2.lock
[filelock:filelock] Lock 281472933620640 released on /root/.cache/pypoetry/cache/repositories/PyPI/_http/0/6/f/5/e/06f5e6ff249dca41a6c62a58477ec555f09d75c84fb8ea39a2015bd2.lock
Creating new session for files.pythonhosted.org
[urllib3:urllib3.connectionpool] Starting new HTTPS connection (1): files.pythonhosted.org:443
[urllib3:urllib3.connectionpool] https://files.pythonhosted.org:443 "GET /packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl HTTP/1.1" 200 37438
[filelock:filelock] Attempting to acquire lock 281472946600720 on /root/.cache/pypoetry/cache/repositories/_default_cache/_http/2/0/1/c/f/201cfecff7dfec815e95834c6faa15cb5c9fe16a1ee6050aabeb620b.lock
[filelock:filelock] Lock 281472946600720 acquired on /root/.cache/pypoetry/cache/repositories/_default_cache/_http/2/0/1/c/f/201cfecff7dfec815e95834c6faa15cb5c9fe16a1ee6050aabeb620b.lock
[filelock:filelock] Attempting to release lock 281472946600720 on /root/.cache/pypoetry/cache/repositories/_default_cache/_http/2/0/1/c/f/201cfecff7dfec815e95834c6faa15cb5c9fe16a1ee6050aabeb620b.lock
[filelock:filelock] Lock 281472946600720 released on /root/.cache/pypoetry/cache/repositories/_default_cache/_http/2/0/1/c/f/201cfecff7dfec815e95834c6faa15cb5c9fe16a1ee6050aabeb620b.lock

edmorley avatar Feb 25 '25 20:02 edmorley

Hey @edmorley,

I'm afraid we choose the wrong (or at least a misleading) wording for the use-poetry-python option.

In Poetry 2 we make the behavior of virtualenvs.prefer-active-python the default and were looking for an option one can use to switch to the default behavior of Poetry 1. This is what virtualenvs.use-poetry-python is actually doing. The default behavior of Poetry 1 was to prefer the Python version of the Poetry installation and if this one doesn't match the required one searching for other executables.

I wonder what would be the correct fix here 🤔 Changing the behavior of use-poetry-python to what one would expect? Change the name (e.g. prefer-poetry-python)? Clarify the behavior in the docs? @abn, @Secrus, @radoering: Do you have opinions?

fin swimmer

finswimmer avatar Feb 26 '25 06:02 finswimmer

@finswimmer Thank you for your reply :-)

I wonder what would be the correct fix here 🤔 Changing the behavior of use-poetry-python to what one would expect? Change the name (e.g. prefer-poetry-python)? Clarify the behavior in the docs?

I guess what we're really wanting is something that forces use of "our" Python installation no matter what (if that Python version is incompatible, a relevant error should still be shown of course). I don't mind what the option is called or how that's achieved, just that it's possible :-)

The equivalent way to do this with Pipenv is --system, and for uv is UV_PROJECT_ENVIRONMENT.

Our Python installation is the first on PATH and it's also the version used to install Poetry. (It's not the distro Python, but a curated Python version we've installed for the app based on the user's request in various config files. In a way, our use-case is perhaps similar to people who use pyenv to install custom versions of Python and want to install into those environments directly without a venv.)

Therefore an option that forced Poetry to always use the first Python on PATH would be equally as useful as the "use Poetry Python", since in our case they are the same Python version.

edmorley avatar Feb 27 '25 10:02 edmorley

I guess what we're really wanting is something that forces use of "our" Python installation no matter what (if that Python version is incompatible, a relevant error should still be shown of course).

I still struggling to understand the use case for such an option. Why do you want to avoid using a valid Python interpreter found on your system? If there is a need to restrict the python version, than define it so in your pyproject.toml.

Another side note: Always use a venv. Even in a docker container. A venv separate the available dependencies from those available in the system. There might be python packages installed in your docker container as well.

finswimmer avatar Feb 28 '25 14:02 finswimmer

I still struggling to understand the use case for such an option. Why do you want to avoid using a valid Python interpreter found on your system?

Because if that installation is a read-only distro Python installation in the base image, we don't want to be using it.

I think "use the current Python installation" (or "use this specific installation") is a pretty reasonable request? :-)

Another side note: Always use a venv. Even in a docker container. A venv separate the available dependencies from those available in the system.

I'm aware of the reasons for using a venv, and have championed for people using one in other circumstances, but there are specific cases where using a venv is not possible - in our case for historic reasons (we don't have control over what end users put in their pyproject.toml, just like GitHub Actions don't have any direct control over what users put in their projects for example).

--

Regardless of the above, the issue I reported feels like a real bug to me - Poetry is saying it's doing one thing in its output but then does another? I'd love to see if we can get this resolved?

edmorley avatar May 10 '25 13:05 edmorley

Regardless of the above, the issue I reported feels like a real bug to me - Poetry is saying it's doing one thing in its output but then does another? I'd love to see if we can get this resolved?

I agree. Sample output for poetry run python -V:

The currently activated Python version 3.9.13 is not supported by the project (>=3.10).
Trying to find and use a compatible version.
Using python.exe (3.13.2)
Skipping virtualenv creation, as specified in config file.
Python 3.9.13

Poetry detects the incompatible Python, tries to find an alternative, then skips venv creation and in the end just uses the incompatible Python.

The first line, which is just a warning, should be an error if virtualenvs.create is false and Poetry should exit at this point.

The issue is independent from the setting use-poetry-python. I adjusted the issue title.

A PR to fix this behavior is welcome.

radoering avatar May 10 '25 14:05 radoering