Incompatible Python version just used (instead of error) when `virtualenvs.create=false`
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
- Create a
Dockerfilewith the below contents. 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
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 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.
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.
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?
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.