python-poetry / poetry

Python packaging and dependency management made easy
https://python-poetry.org
MIT License
31.89k stars 2.28k forks source link

Legacy Repository Handler Allowing Mismatched Versions To Be Installed #9297

Open joekiller opened 7 months ago

joekiller commented 7 months ago

Description

Doing analysis related to the docutils 0.21 release snafu, see https://github.com/python-poetry/poetry/issues/9293, it appears the Legacy Repository Handler allows packages of incorrect metadata to be installed. I cannot speak to if the pypi repository handler is allowing this as this is piggybacking off my #9293 analysis.

If the repository handler would assert the metadata version vs what it retrieved the divergent repo paths would converge at the same conclusion, of "bad package".

Having a colleague simply utilize a renamed pypi and having success to install docutils 0.21 was quite strange. I get that the alternative naming was causing a legacy path and that there's a lot to juggle here and address this at warehouse is helpful to prevent such snafu. There is the https://github.com/pypi/warehouse/issues/15749 post regarding enforcing naming of the package better however the metadata within the package was still 0.21. Reviewing docutils bugs 483 it seems pip will reject the package when the metadata is incorrect.

Not to beat on docutils too hard here, but it seems that they had a history of these types of meta changes.

https://pypi.org/project/docutils/0.15/#files Screenshot 2024-04-10 at 5 40 05 PM

This package seems to have hit a corner uncleaned for a very long time. Perhaps it'll add some imperative to resolve legacy behaviors.

Should poetry be checking the package metadata consistently or is this expected behavior?

Workarounds

Not really a work around but I think this alternative path is the explanation for a common theme of confusion where people specify a non-prioritized pypi repository via something like:

[[tool.poetry.source]]
name = "pypi-public"
url = "https://pypi.org/simple/"

and then experience "when I create a different pypi repo my install works". Combined with the fact that warehouse can allow some inappropriate package naming to take place, it seems this alternative path makes some installations work.

Making poetry consistently check the package metadata and alert the user, regardless of the repository handler path may be a way to reduce some of the confusion.

Poetry Installation Method

pip

Operating System

mac os 14.4.1

Poetry Version

1.8.2

Poetry Configuration

poetry config --list
cache-dir = "/Users/user/Library/Caches/pypoetry"
experimental.system-git-client = false
installer.max-workers = null
installer.modern-installation = true
installer.no-binary = null
installer.parallel = true
keyring.enabled = true
solver.lazy-wheel = true
virtualenvs.create = true
virtualenvs.in-project = null
virtualenvs.options.always-copy = false
virtualenvs.options.no-pip = false
virtualenvs.options.no-setuptools = false
virtualenvs.options.system-site-packages = false
virtualenvs.path = "{cache-dir}/virtualenvs"  # /Users/user/Library/Caches/pypoetry/virtualenvs
virtualenvs.prefer-active-python = false
virtualenvs.prompt = "{project_name}-py{python_version}"
warnings.export = true

Python Sysconfig

Platform: "macosx-10.9-universal2"
Python version: "3.11"
Current installation scheme: "posix_prefix"

Paths: 
    data = "/Library/Frameworks/Python.framework/Versions/3.11"
    include = "/Library/Frameworks/Python.framework/Versions/3.11/include/python3.11"
    platinclude = "/Library/Frameworks/Python.framework/Versions/3.11/include/python3.11"
    platlib = "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages"
    platstdlib = "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11"
    purelib = "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages"
    scripts = "/Library/Frameworks/Python.framework/Versions/3.11/bin"
    stdlib = "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11"

Variables: 
    ABIFLAGS = ""
    AC_APPLE_UNIVERSAL_BUILD = "0"
    AIX_BUILDDATE = "0"
    AIX_GENUINE_CPLUSPLUS = "0"
    ALIGNOF_LONG = "8"
    ALIGNOF_SIZE_T = "8"
    ALT_SOABI = "0"
    ANDROID_API_LEVEL = "0"
    AR = "/usr/bin/xcrun ar"
    ARFLAGS = "rcs"
    BASECFLAGS = "-Wsign-compare -Wunreachable-code -fno-common -dynamic"
    BASECPPFLAGS = "-IObjects -IInclude -IPython"
    BASEMODLIBS = ""
    BINDIR = "/Library/Frameworks/Python.framework/Versions/3.11/bin"
    BINLIBDEST = "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11"
    BLDLIBRARY = ""
    BLDSHARED = "clang -bundle -undefined dynamic_lookup -arch arm64 -arch x86_64 -g"
    BOOTSTRAP_HEADERS = "\"
    BUILDEXE = ".exe"
    BUILDPYTHON = "python.exe"
    BUILD_GNU_TYPE = "x86_64-apple-darwin20.6.0"
    BYTESTR_DEPS = "\"
    CC = "clang"
    CCSHARED = ""
    CFLAGS = "-Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -arch arm64 -arch x86_64 -g"
    CFLAGSFORSHARED = ""
    CFLAGS_ALIASING = "-fno-strict-aliasing"
    CONFIGFILES = "configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in"
    CONFIGURE_CFLAGS = "-arch arm64 -arch x86_64 -g"
    CONFIGURE_CFLAGS_NODIST = "-flto -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden"
    CONFIGURE_CPPFLAGS = ""
    CONFIGURE_LDFLAGS = "-arch arm64 -arch x86_64 -g"
    CONFIGURE_LDFLAGS_NODIST = "-flto -Wl,-export_dynamic -g"
    CONFIGURE_LDFLAGS_NOLTO = "-flto=thin"
    CONFIG_ARGS = "'-C' '--enable-framework' '--enable-universalsdk=/' '--with-universal-archs=universal2' '--with-computed-gotos' '--without-ensurepip' '--with-openssl=/tmp/_py/libraries/usr/local' '--enable-optimizations' '--with-lto' 'TCLTK_CFLAGS=-I/tmp/_py/libraries/usr/local/include' 'TCLTK_LIBS=-ltcl8.6 -ltk8.6' 'LDFLAGS=-g' 'CFLAGS=-g' 'CC=clang'"
    CONFINCLUDEDIR = "/Library/Frameworks/Python.framework/Versions/3.11/include"
    CONFINCLUDEPY = "/Library/Frameworks/Python.framework/Versions/3.11/include/python3.11"
    COREPYTHONPATH = ""
    COVERAGE_INFO = "/private/tmp/_py/_bld/python/coverage.info"
    COVERAGE_LCOV_OPTIONS = "--rc lcov_branch_coverage=1"
    COVERAGE_REPORT = "/private/tmp/_py/_bld/python/lcov-report"
    COVERAGE_REPORT_OPTIONS = "--rc lcov_branch_coverage=1 --branch-coverage --title "CPython 3.11 LCOV report [commit $(shell )]""
    CPPFLAGS = "-IObjects -IInclude -IPython -I. -I/Users/sysadmin/build/v3.11.7/Include"
    CXX = "clang++"
    DECIMAL_CFLAGS = "-I/Users/sysadmin/build/v3.11.7/Modules/_decimal/libmpdec -DUNIVERSAL=1"
    DECIMAL_LDFLAGS = "-lm Modules/_decimal/libmpdec/libmpdec.a"
    DEEPFREEZE_C = "Python/deepfreeze/deepfreeze.c"
    DEEPFREEZE_DEPS = "/Users/sysadmin/build/v3.11.7/Tools/scripts/deepfreeze.py _bootstrap_python /Users/sysadmin/build/v3.11.7/Programs/_freeze_module.py \"
    DEEPFREEZE_OBJS = "Python/deepfreeze/deepfreeze.o"
    DESTDIRS = "/Library/Frameworks/Python.framework/Versions/3.11 /Library/Frameworks/Python.framework/Versions/3.11/lib /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11 /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/lib-dynload"
    DESTLIB = "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11"
    DESTPATH = ""
    DESTSHARED = "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/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"
    DTRACE = ""
    DTRACE_DEPS = "\"
    DTRACE_HEADERS = ""
    DTRACE_OBJS = ""
    DYNLOADFILE = "dynload_shlib.o"
    ENABLE_IPV6 = "1"
    ENSUREPIP = "no"
    EXE = ""
    EXEMODE = "755"
    EXPAT_CFLAGS = "-I/Users/sysadmin/build/v3.11.7/Modules/expat"
    EXPAT_LDFLAGS = "-lm Modules/expat/libexpat.a"
    EXPORTSFROM = ""
    EXPORTSYMS = ""
    EXTRATESTOPTS = ""
    EXTRA_CFLAGS = ""
    EXT_SUFFIX = ".cpython-311-darwin.so"
    FILEMODE = "644"
    FLOAT_WORDS_BIGENDIAN = "0"
    FREEZE_MODULE = "./_bootstrap_python /Users/sysadmin/build/v3.11.7/Programs/_freeze_module.py"
    FREEZE_MODULE_BOOTSTRAP = "./Programs/_freeze_module"
    FREEZE_MODULE_BOOTSTRAP_DEPS = "Programs/_freeze_module"
    FREEZE_MODULE_DEPS = "_bootstrap_python /Users/sysadmin/build/v3.11.7/Programs/_freeze_module.py"
    FROZEN_FILES_IN = "\"
    FROZEN_FILES_OUT = "\"
    GETPGRP_HAVE_ARG = "0"
    GITBRANCH = ""
    GITTAG = ""
    GITVERSION = ""
    GNULD = "no"
    HAVE_ACCEPT = "1"
    HAVE_ACCEPT4 = "0"
    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 = "0"
    HAVE_ATANH = "1"
    HAVE_BIND = "1"
    HAVE_BIND_TEXTDOMAIN_CODESET = "0"
    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 = "1"
    HAVE_BROKEN_UNSETENV = "0"
    HAVE_BUILTIN_ATOMIC = "1"
    HAVE_BZLIB_H = "1"
    HAVE_CHFLAGS = "1"
    HAVE_CHMOD = "1"
    HAVE_CHOWN = "1"
    HAVE_CHROOT = "1"
    HAVE_CLOCK = "1"
    HAVE_CLOCK_GETRES = "1"
    HAVE_CLOCK_GETTIME = "1"
    HAVE_CLOCK_NANOSLEEP = "0"
    HAVE_CLOCK_SETTIME = "1"
    HAVE_CLOSE_RANGE = "0"
    HAVE_COMPUTED_GOTOS = "1"
    HAVE_CONFSTR = "1"
    HAVE_CONIO_H = "0"
    HAVE_CONNECT = "1"
    HAVE_COPY_FILE_RANGE = "0"
    HAVE_CRYPT_H = "0"
    HAVE_CRYPT_R = "0"
    HAVE_CTERMID = "1"
    HAVE_CTERMID_R = "1"
    HAVE_CURSES_FILTER = "1"
    HAVE_CURSES_H = "1"
    HAVE_CURSES_HAS_KEY = "1"
    HAVE_CURSES_IMMEDOK = "1"
    HAVE_CURSES_IS_PAD = "0"
    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 = "0"
    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 = "0"
    HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH = "1"
    HAVE_DYNAMIC_LOADING = "1"
    HAVE_ENDIAN_H = "0"
    HAVE_EPOLL = "0"
    HAVE_EPOLL_CREATE1 = "0"
    HAVE_ERF = "1"
    HAVE_ERFC = "1"
    HAVE_ERRNO_H = "1"
    HAVE_EVENTFD = "0"
    HAVE_EXECV = "1"
    HAVE_EXPLICIT_BZERO = "0"
    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 = "0"
    HAVE_FDOPENDIR = "1"
    HAVE_FDWALK = "0"
    HAVE_FEXECVE = "0"
    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 = "0"
    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 = "0"
    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_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 = "0"
    HAVE_GETHOSTBYNAME_R_3_ARG = "0"
    HAVE_GETHOSTBYNAME_R_5_ARG = "0"
    HAVE_GETHOSTBYNAME_R_6_ARG = "0"
    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 = "0"
    HAVE_GETRANDOM_SYSCALL = "0"
    HAVE_GETRESGID = "0"
    HAVE_GETRESUID = "0"
    HAVE_GETRUSAGE = "1"
    HAVE_GETSERVBYNAME = "1"
    HAVE_GETSERVBYPORT = "1"
    HAVE_GETSID = "1"
    HAVE_GETSOCKNAME = "1"
    HAVE_GETSPENT = "0"
    HAVE_GETSPNAM = "0"
    HAVE_GETUID = "1"
    HAVE_GETWD = "1"
    HAVE_GLIBC_MEMMOVE_BUG = "0"
    HAVE_GRP_H = "1"
    HAVE_HSTRERROR = "1"
    HAVE_HTOLE64 = "0"
    HAVE_IEEEFP_H = "0"
    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 = "1"
    HAVE_LANGINFO_H = "1"
    HAVE_LARGEFILE_SUPPORT = "0"
    HAVE_LCHFLAGS = "1"
    HAVE_LCHMOD = "1"
    HAVE_LCHOWN = "1"
    HAVE_LIBB2 = "0"
    HAVE_LIBDB = "0"
    HAVE_LIBDL = "1"
    HAVE_LIBDLD = "0"
    HAVE_LIBGDBM_COMPAT = "0"
    HAVE_LIBIEEE = "0"
    HAVE_LIBINTL_H = "0"
    HAVE_LIBNDBM = "0"
    HAVE_LIBREADLINE = "1"
    HAVE_LIBRESOLV = "0"
    HAVE_LIBSENDFILE = "0"
    HAVE_LIBSQLITE3 = "1"
    HAVE_LIBUTIL_H = "0"
    HAVE_LINK = "1"
    HAVE_LINKAT = "1"
    HAVE_LINUX_AUXVEC_H = "0"
    HAVE_LINUX_CAN_BCM_H = "0"
    HAVE_LINUX_CAN_H = "0"
    HAVE_LINUX_CAN_J1939_H = "0"
    HAVE_LINUX_CAN_RAW_FD_FRAMES = "0"
    HAVE_LINUX_CAN_RAW_H = "0"
    HAVE_LINUX_CAN_RAW_JOIN_FILTERS = "0"
    HAVE_LINUX_LIMITS_H = "0"
    HAVE_LINUX_MEMFD_H = "0"
    HAVE_LINUX_NETLINK_H = "0"
    HAVE_LINUX_QRTR_H = "0"
    HAVE_LINUX_RANDOM_H = "0"
    HAVE_LINUX_SOUNDCARD_H = "0"
    HAVE_LINUX_TIPC_H = "0"
    HAVE_LINUX_VM_SOCKETS_H = "0"
    HAVE_LINUX_WAIT_H = "0"
    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 = "1"
    HAVE_MADVISE = "1"
    HAVE_MAKEDEV = "1"
    HAVE_MBRTOWC = "1"
    HAVE_MEMFD_CREATE = "0"
    HAVE_MEMORY_H = "1"
    HAVE_MEMRCHR = "0"
    HAVE_MKDIRAT = "1"
    HAVE_MKFIFO = "1"
    HAVE_MKFIFOAT = "0"
    HAVE_MKNOD = "1"
    HAVE_MKNODAT = "0"
    HAVE_MKTIME = "1"
    HAVE_MMAP = "1"
    HAVE_MREMAP = "0"
    HAVE_NANOSLEEP = "1"
    HAVE_NCURSES_H = "1"
    HAVE_NDBM_H = "1"
    HAVE_NDIR_H = "0"
    HAVE_NETCAN_CAN_H = "0"
    HAVE_NETDB_H = "1"
    HAVE_NETINET_IN_H = "1"
    HAVE_NETPACKET_PACKET_H = "0"
    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_PATHCONF = "1"
    HAVE_PAUSE = "1"
    HAVE_PIPE = "1"
    HAVE_PIPE2 = "0"
    HAVE_PLOCK = "0"
    HAVE_POLL = "1"
    HAVE_POLL_H = "1"
    HAVE_POSIX_FADVISE = "0"
    HAVE_POSIX_FALLOCATE = "0"
    HAVE_POSIX_SPAWN = "1"
    HAVE_POSIX_SPAWNP = "1"
    HAVE_PREAD = "1"
    HAVE_PREADV = "1"
    HAVE_PREADV2 = "0"
    HAVE_PRLIMIT = "0"
    HAVE_PROCESS_H = "0"
    HAVE_PROTOTYPES = "1"
    HAVE_PTHREAD_CONDATTR_SETCLOCK = "0"
    HAVE_PTHREAD_DESTRUCTOR = "0"
    HAVE_PTHREAD_GETCPUCLOCKID = "0"
    HAVE_PTHREAD_H = "1"
    HAVE_PTHREAD_INIT = "0"
    HAVE_PTHREAD_KILL = "1"
    HAVE_PTHREAD_SIGMASK = "1"
    HAVE_PTHREAD_STUBS = "0"
    HAVE_PTY_H = "0"
    HAVE_PWRITE = "1"
    HAVE_PWRITEV = "1"
    HAVE_PWRITEV2 = "0"
    HAVE_READLINK = "1"
    HAVE_READLINKAT = "1"
    HAVE_READV = "1"
    HAVE_REALPATH = "1"
    HAVE_RECVFROM = "1"
    HAVE_RENAMEAT = "1"
    HAVE_RL_APPEND_HISTORY = "0"
    HAVE_RL_CATCH_SIGNAL = "0"
    HAVE_RL_COMPDISP_FUNC_T = "0"
    HAVE_RL_COMPLETION_APPEND_CHARACTER = "1"
    HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK = "1"
    HAVE_RL_COMPLETION_MATCHES = "1"
    HAVE_RL_COMPLETION_SUPPRESS_APPEND = "0"
    HAVE_RL_PRE_INPUT_HOOK = "1"
    HAVE_RL_RESIZE_TERMINAL = "0"
    HAVE_RPC_RPC_H = "1"
    HAVE_RTPSPAWN = "0"
    HAVE_SCHED_GET_PRIORITY_MAX = "1"
    HAVE_SCHED_H = "1"
    HAVE_SCHED_RR_GET_INTERVAL = "0"
    HAVE_SCHED_SETAFFINITY = "0"
    HAVE_SCHED_SETPARAM = "0"
    HAVE_SCHED_SETSCHEDULER = "0"
    HAVE_SEM_CLOCKWAIT = "0"
    HAVE_SEM_GETVALUE = "1"
    HAVE_SEM_OPEN = "1"
    HAVE_SEM_TIMEDWAIT = "0"
    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_SETPGID = "1"
    HAVE_SETPGRP = "1"
    HAVE_SETPRIORITY = "1"
    HAVE_SETREGID = "1"
    HAVE_SETRESGID = "0"
    HAVE_SETRESUID = "0"
    HAVE_SETREUID = "1"
    HAVE_SETSID = "1"
    HAVE_SETSOCKOPT = "1"
    HAVE_SETUID = "1"
    HAVE_SETVBUF = "1"
    HAVE_SHADOW_H = "0"
    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 = "0"
    HAVE_SIGWAIT = "1"
    HAVE_SIGWAITINFO = "0"
    HAVE_SNPRINTF = "1"
    HAVE_SOCKADDR_ALG = "0"
    HAVE_SOCKADDR_SA_LEN = "1"
    HAVE_SOCKADDR_STORAGE = "1"
    HAVE_SOCKET = "1"
    HAVE_SOCKETPAIR = "1"
    HAVE_SPAWN_H = "1"
    HAVE_SPLICE = "0"
    HAVE_SSIZE_T = "1"
    HAVE_STATVFS = "1"
    HAVE_STAT_TV_NSEC = "0"
    HAVE_STAT_TV_NSEC2 = "1"
    HAVE_STDARG_PROTOTYPES = "1"
    HAVE_STDINT_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 = "1"
    HAVE_STRUCT_STAT_ST_BLKSIZE = "1"
    HAVE_STRUCT_STAT_ST_BLOCKS = "1"
    HAVE_STRUCT_STAT_ST_FLAGS = "1"
    HAVE_STRUCT_STAT_ST_GEN = "1"
    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 = "0"
    HAVE_SYS_BSDTTY_H = "0"
    HAVE_SYS_DEVPOLL_H = "0"
    HAVE_SYS_DIR_H = "0"
    HAVE_SYS_ENDIAN_H = "0"
    HAVE_SYS_EPOLL_H = "0"
    HAVE_SYS_EVENTFD_H = "0"
    HAVE_SYS_EVENT_H = "1"
    HAVE_SYS_FILE_H = "1"
    HAVE_SYS_IOCTL_H = "1"
    HAVE_SYS_KERN_CONTROL_H = "1"
    HAVE_SYS_LOADAVG_H = "0"
    HAVE_SYS_LOCK_H = "1"
    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 = "0"
    HAVE_SYS_SOCKET_H = "1"
    HAVE_SYS_SOUNDCARD_H = "0"
    HAVE_SYS_STATVFS_H = "1"
    HAVE_SYS_STAT_H = "1"
    HAVE_SYS_SYSCALL_H = "1"
    HAVE_SYS_SYSMACROS_H = "0"
    HAVE_SYS_SYS_DOMAIN_H = "1"
    HAVE_SYS_TERMIO_H = "0"
    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_TIMES = "1"
    HAVE_TMPFILE = "1"
    HAVE_TMPNAM = "1"
    HAVE_TMPNAM_R = "0"
    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_USABLE_WCHAR_T = "0"
    HAVE_UTIL_H = "1"
    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 = "0"
    HAVE_UUID_H = "0"
    HAVE_UUID_UUID_H = "1"
    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 = "1"
    HAVE__GETPTY = "0"
    HOSTRUNNER = ""
    HOST_GNU_TYPE = "x86_64-apple-darwin20.6.0"
    INCLDIRSTOMAKE = "/Library/Frameworks/Python.framework/Versions/3.11/include /Library/Frameworks/Python.framework/Versions/3.11/include /Library/Frameworks/Python.framework/Versions/3.11/include/python3.11 /Library/Frameworks/Python.framework/Versions/3.11/include/python3.11"
    INCLUDEDIR = "/Library/Frameworks/Python.framework/Versions/3.11/include"
    INCLUDEPY = "/Library/Frameworks/Python.framework/Versions/3.11/include/python3.11"
    INSTALL = "/usr/bin/install -c"
    INSTALL_DATA = "/usr/bin/install -c -m 644"
    INSTALL_PROGRAM = "/usr/bin/install -c"
    INSTALL_SCRIPT = "/usr/bin/install -c"
    INSTALL_SHARED = "/usr/bin/install -c -m 755"
    INSTSONAME = "Python.framework/Versions/3.11/Python"
    IO_H = "Modules/_io/_iomodule.h"
    IO_OBJS = "\"
    LDCXXSHARED = "clang++ -bundle -undefined dynamic_lookup"
    LDFLAGS = "-arch arm64 -arch x86_64 -g"
    LDLIBRARY = "Python.framework/Versions/3.11/Python"
    LDLIBRARYDIR = ""
    LDSHARED = "clang -bundle -undefined dynamic_lookup -arch arm64 -arch x86_64 -g"
    LDVERSION = "3.11"
    LIBC = ""
    LIBDEST = "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11"
    LIBDIR = "/Library/Frameworks/Python.framework/Versions/3.11/lib"
    LIBEXPAT_A = "Modules/expat/libexpat.a"
    LIBEXPAT_CFLAGS = "-I/Users/sysadmin/build/v3.11.7/Modules/expat -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -arch arm64 -arch x86_64 -g -flto -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -fprofile-instr-use=code.profclangd -I/Users/sysadmin/build/v3.11.7/Include/internal -IObjects -IInclude -IPython -I. -I/Users/sysadmin/build/v3.11.7/Include"
    LIBEXPAT_HEADERS = "\"
    LIBEXPAT_OBJS = "\"
    LIBFFI_INCLUDEDIR = ""
    LIBM = ""
    LIBMPDEC_A = "Modules/_decimal/libmpdec/libmpdec.a"
    LIBMPDEC_CFLAGS = "-I/Users/sysadmin/build/v3.11.7/Modules/_decimal/libmpdec -DUNIVERSAL=1 -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -arch arm64 -arch x86_64 -g -flto -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -fprofile-instr-use=code.profclangd -I/Users/sysadmin/build/v3.11.7/Include/internal -IObjects -IInclude -IPython -I. -I/Users/sysadmin/build/v3.11.7/Include"
    LIBMPDEC_HEADERS = "\"
    LIBMPDEC_OBJS = "\"
    LIBOBJDIR = "Python/"
    LIBOBJS = ""
    LIBPC = "/Library/Frameworks/Python.framework/Versions/3.11/lib/pkgconfig"
    LIBPL = "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/config-3.11-darwin"
    LIBPYTHON = ""
    LIBRARY = "libpython3.11.a"
    LIBRARY_DEPS = "libpython3.11.a Python.framework/Versions/3.11/Python"
    LIBRARY_OBJS = "\"
    LIBRARY_OBJS_OMIT_FROZEN = "\"
    LIBS = "-ldl  -framework CoreFoundation"
    LIBSUBDIRS = "asyncio \"
    LINKCC = "clang"
    LINKFORSHARED = "-Wl,-stack_size,1000000  -framework CoreFoundation Python.framework/Versions/3.11/Python"
    LINK_PYTHON_DEPS = "libpython3.11.a Python.framework/Versions/3.11/Python"
    LINK_PYTHON_OBJS = ""
    LIPO_32BIT_FLAGS = ""
    LIPO_INTEL64_FLAGS = "-extract x86_64"
    LLVM_PROF_ERR = "no"
    LLVM_PROF_FILE = "LLVM_PROFILE_FILE="code-%p.profclangr""
    LLVM_PROF_MERGER = "/usr/bin/xcrun llvm-profdata merge -output=code.profclangd *.profclangr"
    LN = "ln"
    LOCALMODLIBS = ""
    MACHDEP = "darwin"
    MACHDEP_OBJS = ""
    MACHDESTLIB = "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11"
    MACOSX_DEPLOYMENT_TARGET = "10.9"
    MAINCC = "clang"
    MAJOR_IN_MKDEV = "0"
    MAJOR_IN_SYSMACROS = "0"
    MAKESETUP = "/Users/sysadmin/build/v3.11.7/Modules/makesetup"
    MANDIR = "/Library/Frameworks/Python.framework/Versions/3.11/share/man"
    MKDIR_P = "/Users/sysadmin/build/v3.11.7/install-sh -c -d"
    MODBUILT_NAMES = "atexit  faulthandler  posix  _signal  _tracemalloc  _codecs  _collections  errno  _io  itertools  _sre  _thread  time  _weakref  _abc  _functools  _locale  _operator  _stat  _symtable  pwd  xxsubtype"
    MODDISABLED_NAMES = ""
    MODLIBS = ""
    MODOBJS = "Modules/atexitmodule.o  Modules/faulthandler.o  Modules/posixmodule.o  Modules/signalmodule.o  Modules/_tracemalloc.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/_threadmodule.o  Modules/timemodule.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  Modules/xxsubtype.o"
    MODSHARED_NAMES = ""
    MODULE_ARRAY_STATE = "yes"
    MODULE_ATEXIT_LDFLAGS = ""
    MODULE_AUDIOOP_LDFLAGS = ""
    MODULE_AUDIOOP_STATE = "yes"
    MODULE_BINASCII_CFLAGS = "-DUSE_ZLIB_CRC32"
    MODULE_BINASCII_LDFLAGS = "-lz"
    MODULE_BINASCII_STATE = "yes"
    MODULE_CMATH_DEPS = "/Users/sysadmin/build/v3.11.7/Modules/_math.h"
    MODULE_CMATH_LDFLAGS = ""
    MODULE_CMATH_STATE = "yes"
    MODULE_ERRNO_LDFLAGS = ""
    MODULE_FAULTHANDLER_LDFLAGS = ""
    MODULE_FCNTL_LDFLAGS = ""
    MODULE_FCNTL_STATE = "yes"
    MODULE_GRP_STATE = "yes"
    MODULE_ITERTOOLS_LDFLAGS = ""
    MODULE_MATH_DEPS = "/Users/sysadmin/build/v3.11.7/Modules/_math.h"
    MODULE_MATH_LDFLAGS = ""
    MODULE_MATH_STATE = "yes"
    MODULE_MMAP_STATE = "yes"
    MODULE_NIS_CFLAGS = ""
    MODULE_NIS_LDFLAGS = ""
    MODULE_NIS_STATE = "yes"
    MODULE_OBJS = "\"
    MODULE_OSSAUDIODEV_STATE = "n/a"
    MODULE_POSIX_LDFLAGS = ""
    MODULE_PWD_LDFLAGS = ""
    MODULE_PWD_STATE = "yes"
    MODULE_PYEXPAT_CFLAGS = "-I/Users/sysadmin/build/v3.11.7/Modules/expat"
    MODULE_PYEXPAT_DEPS = "\ Modules/expat/libexpat.a"
    MODULE_PYEXPAT_LDFLAGS = "-lm Modules/expat/libexpat.a"
    MODULE_PYEXPAT_STATE = "yes"
    MODULE_RESOURCE_STATE = "yes"
    MODULE_SELECT_STATE = "yes"
    MODULE_SPWD_STATE = "n/a"
    MODULE_SYSLOG_STATE = "yes"
    MODULE_TERMIOS_STATE = "yes"
    MODULE_TIME_LDFLAGS = ""
    MODULE_TIME_STATE = "yes"
    MODULE_UNICODEDATA_DEPS = "/Users/sysadmin/build/v3.11.7/Modules/unicodedata_db.h /Users/sysadmin/build/v3.11.7/Modules/unicodename_db.h"
    MODULE_UNICODEDATA_STATE = "yes"
    MODULE_XXLIMITED_35_STATE = "yes"
    MODULE_XXLIMITED_STATE = "yes"
    MODULE_XXSUBTYPE_LDFLAGS = ""
    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 = "/Users/sysadmin/build/v3.11.7/Modules/_blake2/impl/blake2-config.h /Users/sysadmin/build/v3.11.7/Modules/_blake2/impl/blake2-impl.h /Users/sysadmin/build/v3.11.7/Modules/_blake2/impl/blake2.h /Users/sysadmin/build/v3.11.7/Modules/_blake2/impl/blake2b-load-sse2.h /Users/sysadmin/build/v3.11.7/Modules/_blake2/impl/blake2b-load-sse41.h /Users/sysadmin/build/v3.11.7/Modules/_blake2/impl/blake2b-ref.c /Users/sysadmin/build/v3.11.7/Modules/_blake2/impl/blake2b-round.h /Users/sysadmin/build/v3.11.7/Modules/_blake2/impl/blake2b.c /Users/sysadmin/build/v3.11.7/Modules/_blake2/impl/blake2s-load-sse2.h /Users/sysadmin/build/v3.11.7/Modules/_blake2/impl/blake2s-load-sse41.h /Users/sysadmin/build/v3.11.7/Modules/_blake2/impl/blake2s-load-xop.h /Users/sysadmin/build/v3.11.7/Modules/_blake2/impl/blake2s-ref.c /Users/sysadmin/build/v3.11.7/Modules/_blake2/impl/blake2s-round.h /Users/sysadmin/build/v3.11.7/Modules/_blake2/impl/blake2s.c /Users/sysadmin/build/v3.11.7/Modules/_blake2/blake2module.h /Users/sysadmin/build/v3.11.7/Modules/hashlib.h"
    MODULE__BLAKE2_LDFLAGS = ""
    MODULE__BLAKE2_STATE = "yes"
    MODULE__BZ2_CFLAGS = ""
    MODULE__BZ2_LDFLAGS = "-lbz2"
    MODULE__BZ2_STATE = "yes"
    MODULE__CODECS_CN_STATE = "yes"
    MODULE__CODECS_HK_STATE = "yes"
    MODULE__CODECS_ISO2022_STATE = "yes"
    MODULE__CODECS_JP_STATE = "yes"
    MODULE__CODECS_KR_STATE = "yes"
    MODULE__CODECS_LDFLAGS = ""
    MODULE__CODECS_TW_STATE = "yes"
    MODULE__COLLECTIONS_LDFLAGS = ""
    MODULE__CONTEXTVARS_STATE = "yes"
    MODULE__CRYPT_CFLAGS = ""
    MODULE__CRYPT_LDFLAGS = ""
    MODULE__CRYPT_STATE = "yes"
    MODULE__CSV_STATE = "yes"
    MODULE__CTYPES_DEPS = "/Users/sysadmin/build/v3.11.7/Modules/_ctypes/ctypes.h"
    MODULE__CTYPES_TEST_LDFLAGS = "-lm"
    MODULE__CTYPES_TEST_STATE = "yes"
    MODULE__DATETIME_LDFLAGS = ""
    MODULE__DATETIME_STATE = "yes"
    MODULE__DECIMAL_CFLAGS = "-I/Users/sysadmin/build/v3.11.7/Modules/_decimal/libmpdec -DUNIVERSAL=1"
    MODULE__DECIMAL_DEPS = "/Users/sysadmin/build/v3.11.7/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 = "-I/Users/sysadmin/build/v3.11.7/Modules/expat"
    MODULE__ELEMENTTREE_DEPS = "/Users/sysadmin/build/v3.11.7/Modules/pyexpat.c \ Modules/expat/libexpat.a"
    MODULE__ELEMENTTREE_STATE = "yes"
    MODULE__FUNCTOOLS_LDFLAGS = ""
    MODULE__GDBM_STATE = "missing"
    MODULE__HASHLIB_CFLAGS = "-I/tmp/_py/libraries/usr/local/include"
    MODULE__HASHLIB_DEPS = "/Users/sysadmin/build/v3.11.7/Modules/hashlib.h"
    MODULE__HASHLIB_LDFLAGS = "  -lcrypto"
    MODULE__HASHLIB_STATE = "yes"
    MODULE__HEAPQ_STATE = "yes"
    MODULE__IO_CFLAGS = "-I/Users/sysadmin/build/v3.11.7/Modules/_io"
    MODULE__IO_DEPS = "/Users/sysadmin/build/v3.11.7/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_DEPS = "/Users/sysadmin/build/v3.11.7/Modules/hashlib.h"
    MODULE__MD5_STATE = "yes"
    MODULE__MULTIBYTECODEC_STATE = "yes"
    MODULE__MULTIPROCESSING_CFLAGS = "-I/Users/sysadmin/build/v3.11.7/Modules/_multiprocessing"
    MODULE__MULTIPROCESSING_STATE = "yes"
    MODULE__OPCODE_STATE = "yes"
    MODULE__OPERATOR_LDFLAGS = ""
    MODULE__PICKLE_STATE = "yes"
    MODULE__POSIXSHMEM_CFLAGS = "-I/Users/sysadmin/build/v3.11.7/Modules/_multiprocessing"
    MODULE__POSIXSHMEM_LDFLAGS = ""
    MODULE__POSIXSHMEM_STATE = "yes"
    MODULE__POSIXSUBPROCESS_STATE = "yes"
    MODULE__QUEUE_STATE = "yes"
    MODULE__RANDOM_STATE = "yes"
    MODULE__SCPROXY_LDFLAGS = "-framework SystemConfiguration -framework CoreFoundation"
    MODULE__SCPROXY_STATE = "yes"
    MODULE__SHA1_DEPS = "/Users/sysadmin/build/v3.11.7/Modules/hashlib.h"
    MODULE__SHA1_STATE = "yes"
    MODULE__SHA256_DEPS = "/Users/sysadmin/build/v3.11.7/Modules/hashlib.h"
    MODULE__SHA256_STATE = "yes"
    MODULE__SHA3_DEPS = "/Users/sysadmin/build/v3.11.7/Modules/_sha3/sha3.c /Users/sysadmin/build/v3.11.7/Modules/_sha3/sha3.h /Users/sysadmin/build/v3.11.7/Modules/hashlib.h"
    MODULE__SHA3_STATE = "yes"
    MODULE__SHA512_DEPS = "/Users/sysadmin/build/v3.11.7/Modules/hashlib.h"
    MODULE__SHA512_STATE = "yes"
    MODULE__SIGNAL_LDFLAGS = ""
    MODULE__SOCKET_DEPS = "/Users/sysadmin/build/v3.11.7/Modules/socketmodule.h /Users/sysadmin/build/v3.11.7/Modules/addrinfo.h /Users/sysadmin/build/v3.11.7/Modules/getaddrinfo.c /Users/sysadmin/build/v3.11.7/Modules/getnameinfo.c"
    MODULE__SOCKET_STATE = "yes"
    MODULE__SQLITE3_CFLAGS = "-I/Users/sysadmin/build/v3.11.7/Modules/_sqlite"
    MODULE__SQLITE3_DEPS = "/Users/sysadmin/build/v3.11.7/Modules/_sqlite/connection.h /Users/sysadmin/build/v3.11.7/Modules/_sqlite/cursor.h /Users/sysadmin/build/v3.11.7/Modules/_sqlite/microprotocols.h /Users/sysadmin/build/v3.11.7/Modules/_sqlite/module.h /Users/sysadmin/build/v3.11.7/Modules/_sqlite/prepare_protocol.h /Users/sysadmin/build/v3.11.7/Modules/_sqlite/row.h /Users/sysadmin/build/v3.11.7/Modules/_sqlite/util.h"
    MODULE__SQLITE3_LDFLAGS = "-lsqlite3"
    MODULE__SQLITE3_STATE = "yes"
    MODULE__SRE_LDFLAGS = ""
    MODULE__SSL_CFLAGS = "-I/tmp/_py/libraries/usr/local/include"
    MODULE__SSL_DEPS = "/Users/sysadmin/build/v3.11.7/Modules/_ssl.h /Users/sysadmin/build/v3.11.7/Modules/_ssl/cert.c /Users/sysadmin/build/v3.11.7/Modules/_ssl/debughelpers.c /Users/sysadmin/build/v3.11.7/Modules/_ssl/misc.c /Users/sysadmin/build/v3.11.7/Modules/_ssl_data.h /Users/sysadmin/build/v3.11.7/Modules/_ssl_data_111.h /Users/sysadmin/build/v3.11.7/Modules/_ssl_data_300.h /Users/sysadmin/build/v3.11.7/Modules/socketmodule.h"
    MODULE__SSL_LDFLAGS = " -lssl -lcrypto"
    MODULE__SSL_STATE = "yes"
    MODULE__STATISTICS_LDFLAGS = ""
    MODULE__STATISTICS_STATE = "yes"
    MODULE__STAT_LDFLAGS = ""
    MODULE__STRUCT_STATE = "yes"
    MODULE__SYMTABLE_LDFLAGS = ""
    MODULE__TESTBUFFER_STATE = "yes"
    MODULE__TESTCAPI_DEPS = "/Users/sysadmin/build/v3.11.7/Modules/testcapi_long.h"
    MODULE__TESTCAPI_STATE = "yes"
    MODULE__TESTCLINIC_STATE = "yes"
    MODULE__TESTIMPORTMULTIPLE_STATE = "yes"
    MODULE__TESTINTERNALCAPI_STATE = "yes"
    MODULE__TESTMULTIPHASE_STATE = "yes"
    MODULE__THREAD_LDFLAGS = ""
    MODULE__TKINTER_CFLAGS = "-Wno-strict-prototypes -DWITH_APPINIT=1"
    MODULE__TKINTER_LDFLAGS = "-ltcl8.6 -ltk8.6"
    MODULE__TKINTER_STATE = "yes"
    MODULE__TRACEMALLOC_LDFLAGS = ""
    MODULE__TYPING_STATE = "yes"
    MODULE__UUID_CFLAGS = ""
    MODULE__UUID_LDFLAGS = ""
    MODULE__UUID_STATE = "yes"
    MODULE__WEAKREF_LDFLAGS = ""
    MODULE__XXSUBINTERPRETERS_STATE = "yes"
    MODULE__XXTESTFUZZ_STATE = "yes"
    MODULE__ZONEINFO_STATE = "yes"
    MULTIARCH = "darwin"
    MULTIARCH_CPPFLAGS = "-DMULTIARCH=\"darwin\""
    MVWDELCH_IS_EXPRESSION = "1"
    NO_AS_NEEDED = "-Wl,--no-as-needed"
    OBJECT_OBJS = "\"
    OPENSSL_INCLUDES = "-I/tmp/_py/libraries/usr/local/include"
    OPENSSL_LDFLAGS = "-L/tmp/_py/libraries/usr/local/lib"
    OPENSSL_LIBS = "-lssl -lcrypto"
    OPENSSL_RPATH = ""
    OPT = "-DNDEBUG -g -fwrapv -O3 -Wall"
    OTHER_LIBTOOL_OPT = ""
    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 Parser/tokenizer.o"
    PEGEN_HEADERS = "\"
    PEGEN_OBJS = "\"
    PGO_PROF_GEN_FLAG = "-fprofile-instr-generate"
    PGO_PROF_USE_FLAG = "-fprofile-instr-use=code.profclangd"
    PLATLIBDIR = "lib"
    POBJS = "\"
    POSIX_SEMAPHORES_NOT_ENABLED = "0"
    PROFILE_TASK = "-m test --pgo --timeout=1200"
    PTHREAD_KEY_T_IS_COMPATIBLE_WITH_INT = "0"
    PTHREAD_SYSTEM_SCHED_SUPPORTED = "1"
    PURIFY = ""
    PY3LIBRARY = ""
    PYLONG_BITS_IN_DIGIT = "0"
    PYTHON = "python"
    PYTHONFRAMEWORK = "Python"
    PYTHONFRAMEWORKDIR = "Python.framework"
    PYTHONFRAMEWORKINSTALLDIR = "/Library/Frameworks/Python.framework"
    PYTHONFRAMEWORKPREFIX = "/Library/Frameworks"
    PYTHONPATH = ""
    PYTHON_FOR_BUILD = "./python.exe -E"
    PYTHON_FOR_BUILD_DEPS = "python.exe"
    PYTHON_FOR_FREEZE = "./_bootstrap_python"
    PYTHON_FOR_REGEN = ""
    PYTHON_HEADERS = "\"
    PYTHON_OBJS = "\"
    PY_BUILTIN_HASHLIB_HASHES = ""md5,sha1,sha256,sha512,sha3,blake2""
    PY_BUILTIN_MODULE_CFLAGS = "-Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -arch arm64 -arch x86_64 -g -flto -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -fprofile-instr-use=code.profclangd -I/Users/sysadmin/build/v3.11.7/Include/internal -IObjects -IInclude -IPython -I. -I/Users/sysadmin/build/v3.11.7/Include -DPy_BUILD_CORE_BUILTIN"
    PY_CFLAGS = "-Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -arch arm64 -arch x86_64 -g"
    PY_CFLAGS_NODIST = "-flto -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -fprofile-instr-use=code.profclangd -I/Users/sysadmin/build/v3.11.7/Include/internal"
    PY_COERCE_C_LOCALE = "1"
    PY_CORE_CFLAGS = "-Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -arch arm64 -arch x86_64 -g -flto -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -fprofile-instr-use=code.profclangd -I/Users/sysadmin/build/v3.11.7/Include/internal -IObjects -IInclude -IPython -I. -I/Users/sysadmin/build/v3.11.7/Include -DPy_BUILD_CORE"
    PY_CORE_LDFLAGS = "-arch arm64 -arch x86_64 -g -flto -Wl,-export_dynamic -g"
    PY_CPPFLAGS = "-IObjects -IInclude -IPython -I. -I/Users/sysadmin/build/v3.11.7/Include"
    PY_ENABLE_SHARED = "0"
    PY_FORMAT_SIZE_T = ""z""
    PY_LDFLAGS = "-arch arm64 -arch x86_64 -g"
    PY_LDFLAGS_NODIST = "-flto -Wl,-export_dynamic -g"
    PY_LDFLAGS_NOLTO = "-arch arm64 -arch x86_64 -g -flto=thin"
    PY_SQLITE_ENABLE_LOAD_EXTENSION = "0"
    PY_SQLITE_HAVE_SERIALIZE = "1"
    PY_SSL_DEFAULT_CIPHERS = "1"
    PY_SSL_DEFAULT_CIPHER_STRING = "0"
    PY_STDMODULE_CFLAGS = "-Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -arch arm64 -arch x86_64 -g -flto -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -fprofile-instr-use=code.profclangd -I/Users/sysadmin/build/v3.11.7/Include/internal -IObjects -IInclude -IPython -I. -I/Users/sysadmin/build/v3.11.7/Include"
    PY_SUPPORT_TIER = "1"
    Py_DEBUG = "0"
    Py_ENABLE_SHARED = "0"
    Py_HASH_ALGORITHM = "0"
    Py_STATS = "0"
    Py_SUNOS_VERSION = "0"
    Py_TRACE_REFS = "0"
    QUICKTESTOPTS = "-x test_subprocess test_io test_lib2to3 \"
    READELF = ":"
    RESSRCDIR = "Mac/Resources/framework"
    RETSIGTYPE = "void"
    RUNSHARED = "DYLD_FRAMEWORK_PATH=/private/tmp/_py/_bld/python"
    SCRIPTDIR = "/Library/Frameworks/Python.framework/Versions/3.11/lib"
    SETPGRP_HAVE_ARG = "0"
    SHELL = "/bin/sh"
    SHLIBS = "-ldl  -framework CoreFoundation"
    SHLIB_SUFFIX = ".so"
    SIGNED_RIGHT_SHIFT_ZERO_FILLS = "0"
    SITEPATH = ""
    SIZEOF_DOUBLE = "8"
    SIZEOF_FLOAT = "4"
    SIZEOF_FPOS_T = "8"
    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 = "8"
    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-311-darwin"
    SRCDIRS = "Modules   Modules/_blake2   Modules/_ctypes   Modules/_decimal   Modules/_decimal/libmpdec   Modules/_io   Modules/_multiprocessing   Modules/_sha3   Modules/_sqlite   Modules/_sre   Modules/_xxtestfuzz   Modules/cjkcodecs   Modules/expat   Objects   Parser   Programs   Python   Python/frozen_modules   Python/deepfreeze"
    SRC_GDB_HOOKS = "/Users/sysadmin/build/v3.11.7/Tools/gdb/libpython.py"
    STATIC_LIBPYTHON = "1"
    STDC_HEADERS = "1"
    STRICT_SYSV_CURSES = "/* Don't use ncurses extensions */"
    STRIPFLAG = "-s"
    SUBDIRS = ""
    SUBDIRSTOO = "Include Lib Misc"
    SYSLIBS = ""
    SYS_SELECT_WITH_SYS_TIME = "1"
    TESTOPTS = ""
    TESTPATH = ""
    TESTPYTHON = "DYLD_FRAMEWORK_PATH=/private/tmp/_py/_bld/python ./python.exe -E"
    TESTPYTHONOPTS = ""
    TESTRUNNER = "DYLD_FRAMEWORK_PATH=/private/tmp/_py/_bld/python ./python.exe -E /Users/sysadmin/build/v3.11.7/Tools/scripts/run_tests.py"
    TESTSUBDIRS = "ctypes/test \"
    TESTTIMEOUT = "1200"
    TEST_MODULES = "yes"
    THREAD_STACK_SIZE = "0x1000000"
    TIMEMODULE_LIB = "0"
    TIME_WITH_SYS_TIME = "1"
    TM_IN_SYS_TIME = "0"
    TZPATH = "/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo"
    UNICODE_DEPS = "\"
    UNIVERSALSDK = "/"
    UPDATE_FILE = "/Users/sysadmin/build/v3.11.7/Tools/scripts/update_file.py"
    USE_COMPUTED_GOTOS = "1"
    VERSION = "3.11"
    VPATH = "/Users/sysadmin/build/v3.11.7"
    WASM_ASSETS_DIR = "./Library/Frameworks/Python.framework/Versions/3.11"
    WASM_STDLIB = "./Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/os.py"
    WHEEL_PKG_DIR = ""
    WINDOW_HAS_FLAGS = "1"
    WITH_DECIMAL_CONTEXTVAR = "1"
    WITH_DOC_STRINGS = "1"
    WITH_DTRACE = "0"
    WITH_DYLD = "1"
    WITH_EDITLINE = "0"
    WITH_FREELISTS = "1"
    WITH_LIBINTL = "0"
    WITH_NEXT_FRAMEWORK = "1"
    WITH_PYMALLOC = "1"
    WITH_VALGRIND = "0"
    X87_DOUBLE_ROUNDING = "0"
    XMLLIBSUBDIRS = "xml xml/dom xml/etree xml/parsers xml/sax"
    abiflags = ""
    abs_builddir = "/private/tmp/_py/_bld/python"
    abs_srcdir = "/Users/sysadmin/build/v3.11.7"
    base = "/Library/Frameworks/Python.framework/Versions/3.11"
    datarootdir = "/Library/Frameworks/Python.framework/Versions/3.11/share"
    exec_prefix = "/Library/Frameworks/Python.framework/Versions/3.11"
    installed_base = "/Library/Frameworks/Python.framework/Versions/3.11"
    installed_platbase = "/Library/Frameworks/Python.framework/Versions/3.11"
    platbase = "/Library/Frameworks/Python.framework/Versions/3.11"
    platlibdir = "lib"
    prefix = "/Library/Frameworks/Python.framework/Versions/3.11"
    projectbase = "/Library/Frameworks/Python.framework/Versions/3.11/bin"
    py_version = "3.11.7"
    py_version_nodot = "311"
    py_version_nodot_plat = ""
    py_version_short = "3.11"
    srcdir = "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/config-3.11-darwin"
    userbase = "/Users/user/Library/Python/3.11"

Example pyproject.toml

see 

https://github.com/joekiller/poetry-post-release-issue/blob/main/releases-pypi/pyproject.toml

vs 

https://github.com/joekiller/poetry-post-release-issue/blob/main/simple-pypi/pyproject.toml

Poetry Runtime Logs

Loading configuration file /Users/user/Library/Application Support/pypoetry/config.toml
Loading configuration file /Users/user/Library/Application Support/pypoetry/auth.toml
Using virtualenv: /Users/user/Library/Caches/pypoetry/virtualenvs/releases-pypi-6BvxtLwm-py3.11
Updating dependencies
Resolving dependencies...
   1: fact: releases-pypi is 0.1.0
   1: derived: releases-pypi
   1: fact: releases-pypi depends on docutils (~=0.21.0, != 0.21.1)
   1: selecting releases-pypi (0.1.0)
   1: derived: docutils (>=0.21.0,<0.22.0,!=0.21.1)
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
Using keyring backend 'macOS Keyring'
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 /simple/docutils/ HTTP/1.1" 200 9373
[filelock:filelock] Attempting to acquire lock 4388787984 on /Users/user/Library/Caches/pypoetry/cache/repositories/PyPI/_http/5/b/e/1/1/5be1135dcb7a68de4427c71119ff80f66b671ae16db019966320bd6b.lock
[filelock:filelock] Lock 4388787984 acquired on /Users/user/Library/Caches/pypoetry/cache/repositories/PyPI/_http/5/b/e/1/1/5be1135dcb7a68de4427c71119ff80f66b671ae16db019966320bd6b.lock
[filelock:filelock] Attempting to release lock 4388787984 on /Users/user/Library/Caches/pypoetry/cache/repositories/PyPI/_http/5/b/e/1/1/5be1135dcb7a68de4427c71119ff80f66b671ae16db019966320bd6b.lock
[filelock:filelock] Lock 4388787984 released on /Users/user/Library/Caches/pypoetry/cache/repositories/PyPI/_http/5/b/e/1/1/5be1135dcb7a68de4427c71119ff80f66b671ae16db019966320bd6b.lock
Source (PyPI): 2 packages found for docutils >=0.21.0,<0.21.1 || >0.21.1,<0.22.0
Source (PyPI): Getting info for docutils (0.21.post1) from PyPI
[urllib3:urllib3.connectionpool] https://pypi.org:443 "GET /pypi/docutils/0.21.post1/json HTTP/1.1" 404 24
Falling back to installed packages to discover metadata for docutils
Found 0 compatible packages for docutils
   1: Version solving took 0.115 seconds.
   1: Tried 1 solutions.

  StopIteration

  at ~/Library/Application Support/pypoetry/venv/lib/python3.11/site-packages/poetry/puzzle/provider.py:498 in complete_package
      494│                     ),
      495│                 )
      496│             except PackageNotFound as e:
      497│                 try:
    → 498│                     dependency_package = next(
      499│                         DependencyPackage(dependency, pkg)
      500│                         for pkg in self.search_for_installed_packages(dependency)
      501│                     )
      502│                 except StopIteration:

The following error occurred when trying to handle this error:

  Stack trace:

  17  ~/Library/Application Support/pypoetry/venv/lib/python3.11/site-packages/cleo/application.py:327 in run
       325│ 
       326│             try:
     → 327│                 exit_code = self._run(io)
       328│             except BrokenPipeError:
       329│                 # If we are piped to another process, it may close early and send a

  16  ~/Library/Application Support/pypoetry/venv/lib/python3.11/site-packages/poetry/console/application.py:190 in _run
       188│         self._load_plugins(io)
       189│ 
     → 190│         exit_code: int = super()._run(io)
       191│         return exit_code
       192│ 

  15  ~/Library/Application Support/pypoetry/venv/lib/python3.11/site-packages/cleo/application.py:431 in _run
       429│             io.input.interactive(interactive)
       430│ 
     → 431│         exit_code = self._run_command(command, io)
       432│         self._running_command = None
       433│ 

  14  ~/Library/Application Support/pypoetry/venv/lib/python3.11/site-packages/cleo/application.py:473 in _run_command
       471│ 
       472│         if error is not None:
     → 473│             raise error
       474│ 
       475│         return terminate_event.exit_code

  13  ~/Library/Application Support/pypoetry/venv/lib/python3.11/site-packages/cleo/application.py:457 in _run_command
       455│ 
       456│             if command_event.command_should_run():
     → 457│                 exit_code = command.run(io)
       458│             else:
       459│                 exit_code = ConsoleCommandEvent.RETURN_CODE_DISABLED

  12  ~/Library/Application Support/pypoetry/venv/lib/python3.11/site-packages/cleo/commands/base_command.py:117 in run
       115│         io.input.validate()
       116│ 
     → 117│         return self.execute(io) or 0
       118│ 
       119│     def merge_application_definition(self, merge_args: bool = True) -> None:

  11  ~/Library/Application Support/pypoetry/venv/lib/python3.11/site-packages/cleo/commands/command.py:61 in execute
        59│ 
        60│         try:
     →  61│             return self.handle()
        62│         except KeyboardInterrupt:
        63│             return 1

  10  ~/Library/Application Support/pypoetry/venv/lib/python3.11/site-packages/poetry/console/commands/install.py:153 in handle
       151│         self.installer.verbose(self.io.is_verbose())
       152│ 
     → 153│         return_code = self.installer.run()
       154│ 
       155│         if return_code != 0:

   9  ~/Library/Application Support/pypoetry/venv/lib/python3.11/site-packages/poetry/installation/installer.py:104 in run
       102│             self.verbose(True)
       103│ 
     → 104│         return self._do_install()
       105│ 
       106│     def dry_run(self, dry_run: bool = True) -> Installer:

   8  ~/Library/Application Support/pypoetry/venv/lib/python3.11/site-packages/poetry/installation/installer.py:241 in _do_install
       239│                 source_root=self._env.path.joinpath("src")
       240│             ):
     → 241│                 ops = solver.solve(use_latest=self._whitelist).calculate_operations()
       242│         else:
       243│             self._io.write_line("Installing dependencies from lock file")

   7  ~/Library/Application Support/pypoetry/venv/lib/python3.11/site-packages/poetry/puzzle/solver.py:71 in solve
        69│         with self._progress(), self._provider.use_latest_for(use_latest or []):
        70│             start = time.time()
     →  71│             packages, depths = self._solve()
        72│             end = time.time()
        73│ 

   6  ~/Library/Application Support/pypoetry/venv/lib/python3.11/site-packages/poetry/puzzle/solver.py:154 in _solve
       152│ 
       153│         try:
     → 154│             result = resolve_version(self._package, self._provider)
       155│ 
       156│             packages = result.packages

   5  ~/Library/Application Support/pypoetry/venv/lib/python3.11/site-packages/poetry/mixology/__init__.py:18 in resolve_version
        16│     solver = VersionSolver(root, provider)
        17│ 
     →  18│     return solver.solve()
        19│ 

   4  ~/Library/Application Support/pypoetry/venv/lib/python3.11/site-packages/poetry/mixology/version_solver.py:175 in solve
       173│             while next is not None:
       174│                 self._propagate(next)
     → 175│                 next = self._choose_package_version()
       176│ 
       177│             return self._result()

   3  ~/Library/Application Support/pypoetry/venv/lib/python3.11/site-packages/poetry/mixology/version_solver.py:514 in _choose_package_version
       512│             package = locked
       513│ 
     → 514│         package = self._provider.complete_package(package)
       515│ 
       516│         conflict = False

   2  ~/Library/Application Support/pypoetry/venv/lib/python3.11/site-packages/poetry/puzzle/provider.py:503 in complete_package
       501│                     )
       502│                 except StopIteration:
     → 503│                     raise e from e
       504│ 
       505│             package = dependency_package.package

   1  ~/Library/Application Support/pypoetry/venv/lib/python3.11/site-packages/poetry/puzzle/provider.py:489 in complete_package
       487│                 dependency_package = DependencyPackage(
       488│                     dependency,
     → 489│                     self._pool.package(
       490│                         package.pretty_name,
       491│                         package.version,

  PackageNotFound

  Package docutils (0.21.post1) not found.

  at ~/Library/Application Support/pypoetry/venv/lib/python3.11/site-packages/poetry/repositories/repository_pool.py:207 in package
      203│             try:
      204│                 return repo.package(name, version, extras=extras)
      205│             except PackageNotFound:
      206│                 continue
    → 207│         raise PackageNotFound(f"Package {name} ({version}) not found.")
      208│ 
      209│     def find_packages(self, dependency: Dependency) -> list[Package]:
      210│         repository_name = dependency.source_name
      211│         if repository_name:
dimbleby commented 7 months ago

Duplicate #9293 with - of course - the same answer. In particular see comment about removing the JSON API, which would remove the difference.

https://github.com/python-poetry/poetry/issues/9293#issuecomment-2048235447

Bottom line: if repositories provide bad data, resolvers will find bad answers.

Please close.

joekiller commented 7 months ago

I attributed this directly to the legacy resolver as the legacy resolver installed distutils sdist labeled as 0.21.post1 even though the metadata within the package said 0.21. As it stands, poetry will install packages with inconsistencies vs what the payload was expected to contain at minimum with the legacy installing making this bug applicable and unresolved as I do not see a duplicate raising this specific issue.

I cannot immediately tell from reviewing the tests and code itself it poetry is guarding from installing packages with metadata that does not match the expected metadata of what has been requested to be installed.

If it is guarding could you point to the functional area where this is covered? That reference would offer myself and anyone else looking into this edge case reassurance that poetry will not install packages with inconsistent metadata if #9170 is merged.

Pip, for example, has explicit tests and errors that it throws when inconsistencies are encountered. These inconsistencies are the type that come up when the payload of the targeted package do not meet the expected metadata presented by the API. Just as the warehouse had proven, the contents of the package behind the URL should not be blindly trusted even if the assurances of the new means of downloading it are met.

The PR #9170 mentions that test_solver_skips_invalid_versions() is deliberately removed which makes me think that there is potential for payloads that are not what they seem to be allowed to slip through. Could a test similar to pip's test_new_resolver_skip_inconsistent_metadata or just the test_solver_skips_invalid_versions be added back?

dimbleby commented 7 months ago

test_solver_skips_invalid_versions() is completely irrelevant, is not removed from main, and is not removed in that pull request anyway.

joekiller commented 7 months ago

It seems that poetry will install packages whose metadata doesn't match what is expected.

Poetry did install a package whose metadata didn't match what was expected.

Is this behavior considered a defect?

dimbleby commented 7 months ago

to me, this is not interesting. People can put any old rubbish into their distribution if they want to: it is the responsibility of package builders to build correct packages.

if you care to do anything about this then you probably want to start somewhere near PackageInfo.from_wheel() and PackageInfo.from_sdist()