python-poetry / poetry

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

Poetry forgetting some dependencies (mix of extras, groups and version markers) #9634

Open ewjoachim opened 3 months ago

ewjoachim commented 3 months ago

Description

I am the maintainer of a package, procrastinate. Procrastinate is compatible with py3.8+ This package provides an optional Sphinx extension, so the package has sphinx as an extra dependency.

[tool.poetry.dependencies]
python = "^3.8"
sphinx = { version = "*", optional = true }

[tool.poetry.extras]
sphinx = ["sphinx"]

Procrastinate, independently, also has a doc that is built with sphinx. Building procrastinate's own doc needs Sphinx v8 (but the Sphinx extension provided by Procrastinate does not) Sphinx v8 only supports py3.10+ Consequently, Procrastinate has an optional dependency group that includes sphinx with v8+ (only for py3.10+) (the doc is built with a modern python, so all is well)

[tool.poetry.group.docs]
optional = true

[tool.poetry.group.docs.dependencies]
Sphinx = { version = ">=8", python = ">=3.10" }

On Sphinx v7, Sphinx has a dependency to importlib-metadata but only for py < 3.10 On v8, they dropped this dependency, given py < 3.10 isn't required anymore.

"importlib-metadata>=6.0; python_version < '3.10'",

https://github.com/sphinx-doc/sphinx/blob/v7.4.7/pyproject.toml#L74C6-L74C24

When installing my env with py3.8, poetry says that importlib-metadata is Skipped for the following reason: Not required, and so it's not installed, but it IS required (and it fails at runtime because it's not there)

$ poetry env use 3.8
$ poetry install --sync --all-extras
$ poetry install --sync --all-extras --without docs  # same issue
$ poetry run python -c 'import importlib_metadata'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'importlib_metadata'

(below is a simple reproducer pyproject.toml that showcases the issue)

Interestingly: here we have the issue without the docs group. If I remove the docs group from pyproject.toml, then it works normally. importlib-metadata is a part of poetry.lock, and sphinx appears twice in poetry.lock (once with v7 and once with v8), as expected.

Workarounds

None identified

Poetry Installation Method

pipx

Operating System

Mac OS 14.2.1 (23C71) (Sonoma)

Poetry Version

Poetry (version 1.8.3)

Poetry Configuration

cache-dir = "/Users/joachim/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/joachim/Library/Caches/pypoetry/virtualenvs
virtualenvs.prefer-active-python = false
virtualenvs.prompt = "{project_name}-py{python_version}"
warnings.export = true

Python Sysconfig

Platform: "macosx-14-arm64"
Python version: "3.8"
Current installation scheme: "posix_prefix"

Paths:
    data = "/Users/joachim/Library/Caches/pypoetry/virtualenvs/test-sphinx-qoVNV-Y4-py3.8"
    include = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/include/python3.8"
    platinclude = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/include/python3.8"
    platlib = "/Users/joachim/Library/Caches/pypoetry/virtualenvs/test-sphinx-qoVNV-Y4-py3.8/lib/python3.8/site-packages"
    platstdlib = "/Users/joachim/Library/Caches/pypoetry/virtualenvs/test-sphinx-qoVNV-Y4-py3.8/lib/python3.8"
    purelib = "/Users/joachim/Library/Caches/pypoetry/virtualenvs/test-sphinx-qoVNV-Y4-py3.8/lib/python3.8/site-packages"
    scripts = "/Users/joachim/Library/Caches/pypoetry/virtualenvs/test-sphinx-qoVNV-Y4-py3.8/bin"
    stdlib = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8"

Variables:
    ABIFLAGS = ""
    AC_APPLE_UNIVERSAL_BUILD = "0"
    AIX_GENUINE_CPLUSPLUS = "0"
    ALT_SOABI = "0"
    ANDROID_API_LEVEL = "0"
    AR = "ar"
    ARFLAGS = "rcs"
    BASECFLAGS = "-Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic"
    BASECPPFLAGS = ""
    BASEMODLIBS = ""
    BINDIR = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/bin"
    BINLIBDEST = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8"
    BLDLIBRARY = ""
    BLDSHARED = "clang -bundle -undefined dynamic_lookup -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk"
    BUILDEXE = ".exe"
    BUILDPYTHON = "python.exe"
    BUILD_GNU_TYPE = "arm-apple-darwin23.4.0"
    BYTESTR_DEPS = "\"
    CC = "clang"
    CCSHARED = ""
    CFLAGS = "-Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk"
    CFLAGSFORSHARED = ""
    CFLAGS_ALIASING = "-fno-strict-aliasing"
    CFLAGS_NODIST = ""
    CONFIGFILES = "configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in"
    CONFIGURE_CFLAGS = "-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk"
    CONFIGURE_CFLAGS_NODIST = "-I/opt/homebrew/include -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration"
    CONFIGURE_CPPFLAGS = "-I/opt/homebrew/include"
    CONFIGURE_LDFLAGS = "-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk"
    CONFIGURE_LDFLAGS_NODIST = "-L/opt/homebrew/lib -Wl,-rpath,/opt/homebrew/lib"
    CONFIG_ARGS = "'--prefix=/opt/homebrew/opt/python@3.8' '--enable-ipv6' '--datarootdir=/opt/homebrew/opt/python@3.8/share' '--datadir=/opt/homebrew/opt/python@3.8/share' '--enable-loadable-sqlite-extensions' '--without-ensurepip' '--with-openssl=/opt/homebrew/opt/openssl@3' '--with-system-libmpdec' '--enable-framework=/opt/homebrew/opt/python@3.8/Frameworks' '--with-dtrace' 'MACOSX_DEPLOYMENT_TARGET=14' '--with-tcltk-includes=-I/opt/homebrew/opt/tcl-tk/include/tcl-tk' '--with-tcltk-libs=-L/opt/homebrew/opt/tcl-tk/lib -ltcl8.6 -ltk8.6' 'CFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk' 'CFLAGS_NODIST=-I/opt/homebrew/include' 'LDFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk' 'LDFLAGS_NODIST=-L/opt/homebrew/lib -Wl,-rpath,/opt/homebrew/lib' 'CPPFLAGS=-I/opt/homebrew/include' 'CC=clang' 'PKG_CONFIG_PATH=/opt/homebrew/opt/mpdecimal/lib/pkgconfig:/opt/homebrew/opt/openssl@3/lib/pkgconfig:/opt/homebrew/opt/readline/lib/pkgconfig:/opt/homebrew/opt/sqlite/lib/pkgconfig:/opt/homebrew/opt/tcl-tk/lib/pkgconfig:/opt/homebrew/opt/xz/lib/pkgconfig' 'PKG_CONFIG_LIBDIR=/usr/lib/pkgconfig:/opt/homebrew/Library/Homebrew/os/mac/pkgconfig/14'"
    CONFINCLUDEDIR = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/include"
    CONFINCLUDEPY = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/include/python3.8"
    COREPYTHONPATH = ""
    COVERAGE_INFO = "/private/tmp/pythonA3.8-20240319-4779-5q5ywm/Python-3.8.19/coverage.info"
    COVERAGE_REPORT = "/private/tmp/pythonA3.8-20240319-4779-5q5ywm/Python-3.8.19/lcov-report"
    COVERAGE_REPORT_OPTIONS = "--no-branch-coverage --title "CPython lcov report""
    CPPFLAGS = "-I. -I./Include -I/opt/homebrew/include"
    CXX = "clang++"
    DESTDIRS = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8 /opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib /opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8 /opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload"
    DESTLIB = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8"
    DESTPATH = ""
    DESTSHARED = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8/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 = "/usr/sbin/dtrace"
    DTRACE_DEPS = "\"
    DTRACE_HEADERS = "Include/pydtrace_probes.h"
    DTRACE_OBJS = ""
    DYNLOADFILE = "dynload_shlib.o"
    ENABLE_IPV6 = "1"
    ENSUREPIP = "no"
    EXE = ""
    EXEMODE = "755"
    EXTRATESTOPTS = ""
    EXTRA_CFLAGS = ""
    EXT_SUFFIX = ".cpython-38-darwin.so"
    FILEMODE = "644"
    FLOAT_WORDS_BIGENDIAN = "0"
    FLOCK_NEEDS_LIBBSD = "0"
    GETPGRP_HAVE_ARG = "0"
    GETTIMEOFDAY_NO_TZ = "0"
    GITBRANCH = ""
    GITTAG = ""
    GITVERSION = ""
    GNULD = "no"
    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_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_CHFLAGS = "1"
    HAVE_CHOWN = "1"
    HAVE_CHROOT = "1"
    HAVE_CLOCK = "1"
    HAVE_CLOCK_GETRES = "1"
    HAVE_CLOCK_GETTIME = "1"
    HAVE_CLOCK_SETTIME = "1"
    HAVE_COMPUTED_GOTOS = "1"
    HAVE_CONFSTR = "1"
    HAVE_CONIO_H = "0"
    HAVE_COPYSIGN = "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 = "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_DECL_ISFINITE = "1"
    HAVE_DECL_ISINF = "1"
    HAVE_DECL_ISNAN = "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_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_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_FINITE = "0"
    HAVE_FLOCK = "1"
    HAVE_FORK = "1"
    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_GAMMA = "0"
    HAVE_GCC_ASM_FOR_MC68881 = "0"
    HAVE_GCC_ASM_FOR_X64 = "0"
    HAVE_GCC_ASM_FOR_X87 = "0"
    HAVE_GCC_UINT128_T = "1"
    HAVE_GETADDRINFO = "1"
    HAVE_GETC_UNLOCKED = "1"
    HAVE_GETENTROPY = "1"
    HAVE_GETGRGID_R = "1"
    HAVE_GETGRNAM_R = "1"
    HAVE_GETGROUPLIST = "1"
    HAVE_GETGROUPS = "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_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_GETPRIORITY = "1"
    HAVE_GETPWENT = "1"
    HAVE_GETPWNAM_R = "1"
    HAVE_GETPWUID_R = "1"
    HAVE_GETRANDOM = "0"
    HAVE_GETRANDOM_SYSCALL = "0"
    HAVE_GETRESGID = "0"
    HAVE_GETRESUID = "0"
    HAVE_GETSID = "1"
    HAVE_GETSPENT = "0"
    HAVE_GETSPNAM = "0"
    HAVE_GETTIMEOFDAY = "1"
    HAVE_GETWD = "1"
    HAVE_GLIBC_MEMMOVE_BUG = "0"
    HAVE_GRP_H = "1"
    HAVE_HSTRERROR = "1"
    HAVE_HTOLE64 = "0"
    HAVE_HYPOT = "1"
    HAVE_IEEEFP_H = "0"
    HAVE_IF_NAMEINDEX = "1"
    HAVE_INET_ATON = "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_LGAMMA = "1"
    HAVE_LIBDL = "1"
    HAVE_LIBDLD = "0"
    HAVE_LIBIEEE = "0"
    HAVE_LIBINTL_H = "0"
    HAVE_LIBREADLINE = "1"
    HAVE_LIBRESOLV = "0"
    HAVE_LIBSENDFILE = "0"
    HAVE_LIBUTIL_H = "0"
    HAVE_LINK = "1"
    HAVE_LINKAT = "1"
    HAVE_LINUX_CAN_BCM_H = "0"
    HAVE_LINUX_CAN_H = "0"
    HAVE_LINUX_CAN_RAW_FD_FRAMES = "0"
    HAVE_LINUX_CAN_RAW_H = "0"
    HAVE_LINUX_MEMFD_H = "0"
    HAVE_LINUX_NETLINK_H = "0"
    HAVE_LINUX_QRTR_H = "0"
    HAVE_LINUX_RANDOM_H = "0"
    HAVE_LINUX_TIPC_H = "0"
    HAVE_LINUX_VM_SOCKETS_H = "0"
    HAVE_LOCKF = "1"
    HAVE_LOG1P = "1"
    HAVE_LOG2 = "1"
    HAVE_LONG_DOUBLE = "1"
    HAVE_LSTAT = "1"
    HAVE_LUTIMES = "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 = "1"
    HAVE_MKNOD = "1"
    HAVE_MKNODAT = "1"
    HAVE_MKTIME = "1"
    HAVE_MMAP = "1"
    HAVE_MREMAP = "0"
    HAVE_NCURSES_H = "1"
    HAVE_NDIR_H = "0"
    HAVE_NETPACKET_PACKET_H = "0"
    HAVE_NET_IF_H = "1"
    HAVE_NICE = "1"
    HAVE_OPENAT = "1"
    HAVE_OPENPTY = "1"
    HAVE_PATHCONF = "1"
    HAVE_PAUSE = "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_PTY_H = "0"
    HAVE_PUTENV = "1"
    HAVE_PWRITE = "1"
    HAVE_PWRITEV = "1"
    HAVE_PWRITEV2 = "0"
    HAVE_READLINK = "1"
    HAVE_READLINKAT = "1"
    HAVE_READV = "1"
    HAVE_REALPATH = "1"
    HAVE_RENAMEAT = "1"
    HAVE_RL_APPEND_HISTORY = "1"
    HAVE_RL_CATCH_SIGNAL = "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_ROUND = "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_GETVALUE = "1"
    HAVE_SEM_OPEN = "1"
    HAVE_SEM_TIMEDWAIT = "0"
    HAVE_SEM_UNLINK = "1"
    HAVE_SENDFILE = "1"
    HAVE_SETEGID = "1"
    HAVE_SETEUID = "1"
    HAVE_SETGID = "1"
    HAVE_SETGROUPS = "1"
    HAVE_SETHOSTNAME = "1"
    HAVE_SETITIMER = "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_SETUID = "1"
    HAVE_SETVBUF = "1"
    HAVE_SHADOW_H = "0"
    HAVE_SHM_OPEN = "1"
    HAVE_SHM_UNLINK = "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_SOCKETPAIR = "1"
    HAVE_SPAWN_H = "1"
    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_STRDUP = "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_SYS_AUDIOIO_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_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_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_TGAMMA = "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_TZNAME = "0"
    HAVE_UCS4_TCL = "0"
    HAVE_UNAME = "1"
    HAVE_UNISTD_H = "1"
    HAVE_UNLINKAT = "1"
    HAVE_UNSETENV = "1"
    HAVE_USABLE_WCHAR_T = "0"
    HAVE_UTIL_H = "1"
    HAVE_UTIMENSAT = "1"
    HAVE_UTIMES = "1"
    HAVE_UTIME_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_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_X509_VERIFY_PARAM_SET1_HOST = "1"
    HAVE_ZLIB_COPY = "1"
    HAVE__GETPTY = "0"
    HOST_GNU_TYPE = "arm-apple-darwin23.4.0"
    INCLDIRSTOMAKE = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/include /opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/include /opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/include/python3.8 /opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/include/python3.8"
    INCLUDEDIR = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/include"
    INCLUDEPY = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/include/python3.8"
    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.8/Python"
    IO_H = "Modules/_io/_iomodule.h"
    IO_OBJS = "\"
    LDCXXSHARED = "clang++ -bundle -undefined dynamic_lookup"
    LDFLAGS = "-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk"
    LDFLAGS_NODIST = ""
    LDLIBRARY = "Python.framework/Versions/3.8/Python"
    LDLIBRARYDIR = ""
    LDSHARED = "clang -bundle -undefined dynamic_lookup -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk"
    LDVERSION = "3.8"
    LIBC = ""
    LIBDEST = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8"
    LIBDIR = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib"
    LIBFFI_INCLUDEDIR = ""
    LIBM = ""
    LIBOBJDIR = "Python/"
    LIBOBJS = ""
    LIBPC = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/pkgconfig"
    LIBPL = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8/config-3.8-darwin"
    LIBPYTHON = ""
    LIBRARY = "libpython3.8.a"
    LIBRARY_OBJS = "\"
    LIBRARY_OBJS_OMIT_FROZEN = "\"
    LIBS = "-ldl   -framework CoreFoundation"
    LIBSUBDIRS = "tkinter tkinter/test tkinter/test/test_tkinter \"
    LINKCC = "clang"
    LINKFORSHARED = "-Wl,-stack_size,1000000  -framework CoreFoundation /opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/Python"
    LIPO_32BIT_FLAGS = ""
    LIPO_INTEL64_FLAGS = ""
    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 = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8"
    MACOSX_DEPLOYMENT_TARGET = "14"
    MAINCC = "clang"
    MAJOR_IN_MKDEV = "0"
    MAJOR_IN_SYSMACROS = "0"
    MAKESETUP = "./Modules/makesetup"
    MANDIR = "/opt/homebrew/opt/python@3.8/share/man"
    MKDIR_P = "./install-sh -c -d"
    MODBUILT_NAMES = "posix  errno  pwd  _sre  _codecs  _weakref  _functools  _operator  _collections  _abc  itertools  atexit  _signal  _stat  time  _thread  _locale  _io  faulthandler  _tracemalloc  _symtable  xxsubtype"
    MODDISABLED_NAMES = ""
    MODLIBS = ""
    MODOBJS = "Modules/posixmodule.o  Modules/errnomodule.o  Modules/pwdmodule.o  Modules/_sre.o  Modules/_codecsmodule.o  Modules/_weakref.o  Modules/_functoolsmodule.o  Modules/_operator.o  Modules/_collectionsmodule.o  Modules/_abc.o  Modules/itertoolsmodule.o  Modules/atexitmodule.o  Modules/signalmodule.o  Modules/_stat.o  Modules/timemodule.o  Modules/_threadmodule.o  Modules/_localemodule.o  Modules/_iomodule.o Modules/iobase.o Modules/fileio.o Modules/bytesio.o Modules/bufferedio.o Modules/textio.o Modules/stringio.o  Modules/faulthandler.o  Modules/_tracemalloc.o Modules/hashtable.o  Modules/symtablemodule.o  Modules/xxsubtype.o"
    MODULE_OBJS = "\"
    MULTIARCH = "darwin"
    MULTIARCH_CPPFLAGS = "-DMULTIARCH=\"darwin\""
    MVWDELCH_IS_EXPRESSION = "1"
    NO_AS_NEEDED = ""
    OBJECT_OBJS = "\"
    OPENSSL_INCLUDES = "-I/opt/homebrew/opt/openssl@3/include"
    OPENSSL_LDFLAGS = "-L/opt/homebrew/opt/openssl@3/lib"
    OPENSSL_LIBS = "-lssl -lcrypto"
    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/parsetok.o Parser/tokenizer.o"
    PGO_PROF_GEN_FLAG = "-fprofile-instr-generate"
    PGO_PROF_USE_FLAG = "-fprofile-instr-use=code.profclangd"
    POBJS = "\"
    POSIX_SEMAPHORES_NOT_ENABLED = "0"
    PROFILE_TASK = "-m test --pgo"
    PTHREAD_KEY_T_IS_COMPATIBLE_WITH_INT = "0"
    PTHREAD_SYSTEM_SCHED_SUPPORTED = "0"
    PURIFY = ""
    PY3LIBRARY = ""
    PYLONG_BITS_IN_DIGIT = "0"
    PYTHON = "python"
    PYTHONFRAMEWORK = "Python"
    PYTHONFRAMEWORKDIR = "Python.framework"
    PYTHONFRAMEWORKINSTALLDIR = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework"
    PYTHONFRAMEWORKPREFIX = "/opt/homebrew/opt/python@3.8/Frameworks"
    PYTHONPATH = ""
    PYTHON_FOR_BUILD = "./python.exe -E"
    PYTHON_FOR_REGEN = "python3"
    PYTHON_HEADERS = "\"
    PYTHON_OBJS = "\"
    PY_BUILTIN_MODULE_CFLAGS = "-Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -I/opt/homebrew/include -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration  -I./Include/internal -I. -I./Include -I/opt/homebrew/include -DPy_BUILD_CORE_BUILTIN"
    PY_CFLAGS = "-Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk"
    PY_CFLAGS_NODIST = "-I/opt/homebrew/include -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration  -I./Include/internal"
    PY_COERCE_C_LOCALE = "1"
    PY_CORE_CFLAGS = "-Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -I/opt/homebrew/include -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration  -I./Include/internal -I. -I./Include -I/opt/homebrew/include -DPy_BUILD_CORE"
    PY_CORE_LDFLAGS = "-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -L/opt/homebrew/lib -Wl,-rpath,/opt/homebrew/lib"
    PY_CPPFLAGS = "-I. -I./Include -I/opt/homebrew/include"
    PY_FORMAT_SIZE_T = ""z""
    PY_LDFLAGS = "-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk"
    PY_LDFLAGS_NODIST = "-L/opt/homebrew/lib -Wl,-rpath,/opt/homebrew/lib"
    PY_SSL_DEFAULT_CIPHERS = "1"
    PY_SSL_DEFAULT_CIPHER_STRING = "0"
    PY_STDMODULE_CFLAGS = "-Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -I/opt/homebrew/include -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration  -I./Include/internal -I. -I./Include -I/opt/homebrew/include"
    Py_DEBUG = "0"
    Py_ENABLE_SHARED = "0"
    Py_HASH_ALGORITHM = "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/pythonA3.8-20240319-4779-5q5ywm/Python-3.8.19"
    SCRIPTDIR = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib"
    SETPGRP_HAVE_ARG = "0"
    SGI_ABI = "@SGI_ABI@"
    SHELL = "/bin/sh"
    SHLIBS = "-ldl   -framework CoreFoundation"
    SHLIB_SUFFIX = ".so"
    SHM_NEEDS_LIBRT = "0"
    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 = "8"
    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"
    SO = ".cpython-38-darwin.so"
    SOABI = "cpython-38-darwin"
    SRCDIRS = "Parser Objects Python Modules Modules/_io Programs"
    SRC_GDB_HOOKS = "./Tools/gdb/libpython.py"
    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"
    TCLTK_INCLUDES = "-I/opt/homebrew/opt/tcl-tk/include/tcl-tk"
    TCLTK_LIBS = "-L/opt/homebrew/opt/tcl-tk/lib -ltcl8.6 -ltk8.6"
    TESTOPTS = ""
    TESTPATH = ""
    TESTPYTHON = "DYLD_FRAMEWORK_PATH=/private/tmp/pythonA3.8-20240319-4779-5q5ywm/Python-3.8.19 ./python.exe"
    TESTPYTHONOPTS = ""
    TESTRUNNER = "DYLD_FRAMEWORK_PATH=/private/tmp/pythonA3.8-20240319-4779-5q5ywm/Python-3.8.19 ./python.exe ./Tools/scripts/run_tests.py"
    TESTTIMEOUT = "1200"
    TIMEMODULE_LIB = "0"
    TIME_WITH_SYS_TIME = "1"
    TM_IN_SYS_TIME = "0"
    UNICODE_DEPS = "\"
    UNIVERSALSDK = ""
    UPDATE_FILE = "python3 ./Tools/scripts/update_file.py"
    USE_COMPUTED_GOTOS = "0"
    VERSION = "3.8"
    WINDOW_HAS_FLAGS = "1"
    WITH_DECIMAL_CONTEXTVAR = "1"
    WITH_DOC_STRINGS = "1"
    WITH_DTRACE = "1"
    WITH_DYLD = "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/pythonA3.8-20240319-4779-5q5ywm/Python-3.8.19"
    abs_srcdir = "/private/tmp/pythonA3.8-20240319-4779-5q5ywm/Python-3.8.19"
    base = "/Users/joachim/Library/Caches/pypoetry/virtualenvs/test-sphinx-qoVNV-Y4-py3.8"
    datarootdir = "/opt/homebrew/opt/python@3.8/share"
    exec_prefix = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8"
    installed_base = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8"
    installed_platbase = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8"
    platbase = "/Users/joachim/Library/Caches/pypoetry/virtualenvs/test-sphinx-qoVNV-Y4-py3.8"
    prefix = "/opt/homebrew/opt/python@3.8/Frameworks/Python.framework/Versions/3.8"
    projectbase = "/opt/homebrew/Cellar/python@3.8/3.8.19/Frameworks/Python.framework/Versions/3.8/bin"
    py_version = "3.8.19"
    py_version_nodot = "38"
    py_version_short = "3.8"
    srcdir = "/opt/homebrew/Cellar/python@3.8/3.8.19/Frameworks/Python.framework/Versions/3.8/lib/python3.8/config-3.8-darwin"
    userbase = "/Users/joachim/Library/Python/3.8"

Example pyproject.toml

[tool.poetry]
name = "test-sphinx"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
package-mode = false

[tool.poetry.dependencies]
python = "^3.8"
sphinx = { version = "*", optional = true }

[tool.poetry.extras]
sphinx = ["sphinx"]

[tool.poetry.group.docs.dependencies]
Sphinx = { version = ">=8", python = ">=3.10" }

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

Poetry Runtime Logs

(see `Installing importlib-metadata (8.2.0): Skipped for the following reason: Not required`)

Using virtualenv: /Users/joachim/Library/Caches/pypoetry/virtualenvs/test-sphinx-qoVNV-Y4-py3.8
Installing dependencies from lock file

Finding the necessary packages for the current system

Package operations: 0 installs, 0 updates, 0 removals, 24 skipped

  - Installing zipp (3.20.0): Pending...
  - Installing zipp (3.20.0): Skipped for the following reason: Not required
  - Installing importlib-metadata (8.2.0): Pending...
  - Installing importlib-metadata (8.2.0): Skipped for the following reason: Not required
  - Installing alabaster (0.7.13): Pending...
  - Installing alabaster (0.7.13): Skipped for the following reason: Already installed
  - Installing babel (2.16.0): Pending...
  - Installing babel (2.16.0): Skipped for the following reason: Already installed
  - Installing certifi (2024.7.4): Pending...
  - Installing certifi (2024.7.4): Skipped for the following reason: Already installed
  - Installing charset-normalizer (3.3.2): Pending...
  - Installing charset-normalizer (3.3.2): Skipped for the following reason: Already installed
  - Installing docutils (0.20.1): Pending...
  - Installing docutils (0.20.1): Skipped for the following reason: Already installed
  - Installing idna (3.7): Pending...
  - Installing idna (3.7): Skipped for the following reason: Already installed
  - Installing imagesize (1.4.1): Pending...
  - Installing imagesize (1.4.1): Skipped for the following reason: Already installed
  - Installing jinja2 (3.1.4): Pending...
  - Installing jinja2 (3.1.4): Skipped for the following reason: Already installed
  - Installing markupsafe (2.1.5): Pending...
  - Installing markupsafe (2.1.5): Skipped for the following reason: Already installed
  - Installing packaging (24.1): Pending...
  - Installing packaging (24.1): Skipped for the following reason: Already installed
  - Installing pygments (2.18.0): Pending...
  - Installing pygments (2.18.0): Skipped for the following reason: Already installed
  - Installing pytz (2024.1): Pending...
  - Installing pytz (2024.1): Skipped for the following reason: Already installed
  - Installing requests (2.32.3): Pending...
  - Installing requests (2.32.3): Skipped for the following reason: Already installed
  - Installing snowballstemmer (2.2.0): Pending...
  - Installing snowballstemmer (2.2.0): Skipped for the following reason: Already installed
  - Installing sphinx (7.1.2): Pending...
  - Installing sphinx (7.1.2): Skipped for the following reason: Already installed
  - Installing sphinxcontrib-applehelp (1.0.4): Pending...
  - Installing sphinxcontrib-applehelp (1.0.4): Skipped for the following reason: Already installed
  - Installing sphinxcontrib-devhelp (1.0.2): Pending...
  - Installing sphinxcontrib-devhelp (1.0.2): Skipped for the following reason: Already installed
  - Installing sphinxcontrib-htmlhelp (2.0.1): Pending...
  - Installing sphinxcontrib-htmlhelp (2.0.1): Skipped for the following reason: Already installed
  - Installing sphinxcontrib-jsmath (1.0.1): Pending...
  - Installing sphinxcontrib-jsmath (1.0.1): Skipped for the following reason: Already installed
  - Installing sphinxcontrib-qthelp (1.0.3): Pending...
  - Installing sphinxcontrib-qthelp (1.0.3): Skipped for the following reason: Already installed
  - Installing sphinxcontrib-serializinghtml (1.1.5): Pending...
  - Installing sphinxcontrib-serializinghtml (1.1.5): Skipped for the following reason: Already installed
  - Installing urllib3 (2.2.2): Pending...
  - Installing urllib3 (2.2.2): Skipped for the following reason: Already installed
dimbleby commented 3 months ago

this is a variation on "recording package.optional in poetry.lock is a bad idea". https://github.com/python-poetry/poetry/issues/3188 is another example.

in this case it is get_extra_package_names() that does not recognise that importlib-metadata is required by the sphinx extra: because it sees that extra and assumes that the first sphinx it finds will be just fine for the rest of its analysis. But the first sphinx it finds is the newer one that does not need importlib-metadata, and after that it never considers the other.

the Right Way to fix this IMO is not to put optional in the lockfile at all: this is a misunderstanding of what the lockfile really is. Rather the installer-solver ought to start out knowing what extras it is solving for, and just return the right answer.

I expect that sorting that out will be quite the tangle for someone.

radoering commented 3 months ago

Might be fixed in the main branch.

1.8.3:

$ poetry install --dry-run --all-extras | grep importlib-metadata
  - Installing importlib-metadata (8.2.0): Skipped for the following reason: Not required

main:

$ poetry install --dry-run --all-extras | grep importlib-metadata
  - Installing importlib-metadata (8.2.0)
dimbleby commented 3 months ago

Pretty sure it isn't, maybe the luck of which sphinx happens to show up first during get_extra_package_names() is unstable

dimbleby commented 3 months ago

Apparently I knew about this at https://github.com/python-poetry/poetry/pull/6372#issue-1360542275

Secrus commented 1 month ago

I am going to consider this a solved issue.

dimbleby commented 1 month ago

This is not a solved issue