Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Resolving dependencies in 2.0 takes forever #9956

Open
ace-han opened this issue Jan 6, 2025 · 18 comments
Open

Resolving dependencies in 2.0 takes forever #9956

ace-han opened this issue Jan 6, 2025 · 18 comments
Labels
kind/bug Something isn't working as expected status/triage This issue needs to be triaged

Comments

@ace-han
Copy link

ace-han commented Jan 6, 2025

Description

Install cleanrl 's dependencies via poetry install takes forever to resolve dependencies

image
image

Workarounds

using poetry==1.8.5 works fine

image

root@dsw-498899-84cf4b4bc5-hg2qz:/mnt/workspace/cleanrl# conda activate base
(base) root@dsw-498899-84cf4b4bc5-hg2qz:/mnt/workspace/cleanrl# poetry install 
Skipping virtualenv creation, as specified in config file.
Updating dependencies
Resolving dependencies... Downloading https://mirrors.aliyun.com/pypi/packages/fe/58/1641614c17fcd7293d250c2cad48011baa1ecef4f109ce2ea027aa8e4898/jax-0.4.8.tar.gz#sha256=0811Resolving dependencies... Downloading https://mirrors.aliyun.com/pypi/packages/02/12/17873498f8da2a61cc17a62e6323c64d783f3bfa331798631661518906b7/expt-0.4.2.tar.gz#sha256=4a7Resolving dependencies... (192.4s)

Package operations: 28 installs, 61 updates, 0 removals

  - Downgrading numpy (1.26.3 -> 1.24.4)
  - Updating certifi (2023.11.17 /home/conda/feedstock_root/build_artifacts/certifi_1700303426725/work/certifi -> 2024.12.14)
  - Updating charset-normalizer (2.0.4 /tmp/build/80754af9/charset-normalizer_1630003229654/work -> 3.4.1)
  - Updating idna (3.4 /croot/idna_1666125576474/work -> 3.10)
  - Updating markupsafe (2.1.3 -> 2.1.5)
  - Installing nvidia-nvjitlink-cu12 (12.4.127)
  - Updating packaging (23.1 /croot/packaging_1693575174725/work -> 24.2)
  - Updating pyasn1 (0.5.1 -> 0.6.1)
  - Updating six (1.16.0 -> 1.17.0)
  - Installing smmap (5.0.2)
  - Updating typing-extensions (4.9.0 -> 4.12.2)
  - Updating urllib3 (1.26.16 /croot/urllib3_1686163155763/work -> 2.3.0)
  - Updating absl-py (2.0.0 -> 2.1.0)
  - Updating cachetools (5.3.2 -> 5.5.0)
  - Updating cloudpickle (3.0.0 -> 3.1.0)
  - Downgrading contourpy (1.2.0 -> 1.1.1)
  - Updating filelock (3.13.1 -> 3.16.1)
  - Updating fonttools (4.47.0 -> 4.55.3)
  - Installing gitdb (4.0.12)
  - Installing gym-notices (0.0.8)
  - Updating kiwisolver (1.4.5 -> 1.4.7)
  - Installing nvidia-cublas-cu12 (12.4.5.8): Downloading... 3%
  - Installing nvidia-cublas-cu12 (12.4.5.8): Downloading... 57%
  - Installing nvidia-cublas-cu12 (12.4.5.8): Installing...
  - Installing nvidia-cublas-cu12 (12.4.5.8)
  - Installing nvidia-cusparse-cu12 (12.3.1.170)
  - Updating pillow (10.2.0 -> 10.4.0)
  - Updating platformdirs (4.1.0 -> 4.3.6)
  - Updating pyasn1-modules (0.3.0 -> 0.4.1)
  - Updating pygments (2.17.2 -> 2.19.0)
  - Updating pyparsing (3.1.1 -> 3.1.4)
  - Updating python-dateutil (2.8.2 -> 2.9.0.post0)
  - Updating pytz (2023.3.post1 -> 2024.2)
  - Updating pyyaml (6.0.1 -> 6.0.2)
  - Updating requests (2.31.0 /croot/requests_1690400202158/work -> 2.32.3)
  - Downgrading rsa (4.9 -> 4.7.2)
  - Updating setuptools (68.0.0 -> 75.3.0)
  - Updating tzdata (2023.4 -> 2024.2)
  - Updating click (8.1.7 -> 8.1.8)
  - Installing commonmark (0.9.1)
  - Updating distlib (0.3.8 -> 0.3.9)
  - Installing docker-pycreds (0.4.0)
  - Installing farama-notifications (0.0.4)
  - Updating fsspec (2023.10.0 -> 2024.12.0): Installing...
  - Updating fsspec (2023.10.0 -> 2024.12.0)
  - Installing gitpython (3.1.44)
  - Updating google-auth (2.26.1 -> 2.37.0)
  - Installing gym (0.23.1): Preparing...
  - Installing gym (0.23.1)
  - Updating imageio (2.33.1 -> 2.35.1)
  - Downgrading imageio-ffmpeg (0.4.9 /home/conda/feedstock_root/build_artifacts/imageio-ffmpeg_1694632425602/work -> 0.3.0): Downloading... 60%
  - Downgrading imageio-ffmpeg (0.4.9 /home/conda/feedstock_root/build_artifacts/imageio-ffmpeg_1694632425602/work -> 0.3.0): Installing...
  - Downgrading imageio-ffmpeg (0.4.9 /home/conda/feedstock_root/build_artifacts/imageio-ffmpeg_1694632425602/work -> 0.3.0)
  - Installing jax-jumpy (1.0.0)
  - Updating jinja2 (3.1.2 -> 3.1.5)
  - Updating markdown (3.5.1 -> 3.7)
  - Updating matplotlib (3.5.3 -> 3.7.5)
  - Updating networkx (2.8.4 -> 3.1)
  - Installing nvidia-cuda-cupti-cu12 (12.4.127)
  - Installing nvidia-cuda-nvrtc-cu12 (12.4.127)
  - Installing nvidia-cuda-runtime-cu12 (12.4.127)
  - Installing nvidia-cudnn-cu12 (9.1.0.70): Downloading... 8%
  - Installing nvidia-cudnn-cu12 (9.1.0.70): Downloading... 19%
  - Installing nvidia-cudnn-cu12 (9.1.0.70): Downloading... 29%
  - Installing nvidia-cudnn-cu12 (9.1.0.70): Downloading... 31%
  - Installing nvidia-cudnn-cu12 (9.1.0.70): Installing...
  - Installing nvidia-cudnn-cu12 (9.1.0.70)
  - Installing nvidia-cufft-cu12 (11.2.1.3)
  - Installing nvidia-curand-cu12 (10.3.5.147)
  - Installing nvidia-cusolver-cu12 (11.6.1.9)
  - Installing nvidia-nccl-cu12 (2.21.5)
  - Installing nvidia-nvtx-cu12 (12.4.127)
  - Downgrading pandas (2.1.4 -> 2.0.3)
  - Installing pathtools (0.1.2)
  - Updating protobuf (3.20.3 -> 4.25.5)
  - Updating psutil (5.9.7 -> 6.1.1)
  - Updating requests-oauthlib (1.3.1 -> 2.0.0)
  - Installing sentry-sdk (2.19.2)
  - Installing setproctitle (1.3.4)
  - Updating sympy (1.12 -> 1.13.1)
  - Updating tqdm (4.65.0 /croot/tqdm_1679561862951/work -> 4.67.1)
  - Updating triton (2.1.0 -> 3.1.0)
  - Updating docstring-parser (0.15 -> 0.16)
  - Updating grpcio (1.60.0 -> 1.69.0)
  - Installing gymnasium (0.28.1)
  - Updating identify (2.5.33 -> 2.6.1)
  - Updating nodeenv (1.8.0 -> 1.9.1)
  - Downgrading rich (13.7.0 -> 11.2.0)
  - Updating shtab (1.6.5 -> 1.7.1)
  - Updating torch (2.1.2+cu121 -> 2.5.1)
  - Updating virtualenv (20.25.0 -> 20.28.1)
  - Installing wandb (0.13.11)
  - Updating werkzeug (2.2.3 -> 3.0.6)
  - Updating wheel (0.41.2 -> 0.45.1)
  - Downgrading huggingface-hub (0.20.2 -> 0.11.1)
  - Downgrading pre-commit (3.6.0 -> 2.21.0)
  - Installing pygame (2.1.0)
  - Installing stable-baselines3 (2.0.0)
  - Updating tenacity (8.2.3 -> 8.5.0)
  - Downgrading tensorboard (2.15.1 -> 2.14.0)
  - Downgrading tyro (0.6.3 -> 0.5.18)

Writing lock file

Installing the current project: cleanrl (2.0.0b1)
(base) root@dsw-498899-84cf4b4bc5-hg2qz:/mnt/workspace/cleanrl# poetry -V
Poetry (version 1.8.5)
(base) root@dsw-498899-84cf4b4bc5-hg2qz:/mnt/workspace/cleanrl# 

Poetry Installation Method

install.python-poetry.org

Operating System

Ubuntu 22.04.2 LTS

Poetry Version

2.0.0

Poetry Configuration

cache-dir = "/root/.cache/pypoetry"
installer.max-workers = null
installer.no-binary = null
installer.only-binary = null
installer.parallel = true
installer.re-resolve = true
keyring.enabled = true
requests.max-retries = 0
solver.lazy-wheel = true
system-git-client = false
virtualenvs.create = false
virtualenvs.in-project = null
virtualenvs.options.always-copy = false
virtualenvs.options.no-pip = false
virtualenvs.options.system-site-packages = false
virtualenvs.path = "/opt/conda/envs"
virtualenvs.prompt = "{project_name}-py{python_version}"
virtualenvs.use-poetry-python = false

Python Sysconfig

sysconfig.log
root@dsw-498793-6c5c78668-ps57p:/tmp# python -m sysconfig
Platform: "linux-x86_64"
Python version: "3.10"
Current installation scheme: "posix_prefix"

Paths: 
        data = "/opt/conda"
        include = "/opt/conda/include/python3.10"
        platinclude = "/opt/conda/include/python3.10"
        platlib = "/opt/conda/lib/python3.10/site-packages"
        platstdlib = "/opt/conda/lib/python3.10"
        purelib = "/opt/conda/lib/python3.10/site-packages"
        scripts = "/opt/conda/bin"
        stdlib = "/opt/conda/lib/python3.10"

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 = "ar"
        ARFLAGS = "rcs"
        BASECFLAGS = "-Wno-unused-result -Wsign-compare"
        BASECPPFLAGS = "-IObjects -IInclude -IPython"
        BASEMODLIBS = ""
        BINDIR = "/opt/conda/bin"
        BINLIBDEST = "/opt/conda/lib/python3.10"
        BLDLIBRARY = "libpython3.10.a"
        BLDSHARED = "gcc -pthread -B /opt/conda/compiler_compat -shared  -Wl,-rpath,/opt/conda/lib -Wl,-rpath-link,/opt/conda/lib -L/opt/conda/lib -Wl,-rpath,/opt/conda/lib -Wl,-rpath-link,/opt/conda/lib -L/opt/conda/lib"
        BUILDEXE = ""
        BUILDPYTHON = "python"
        BUILD_GNU_TYPE = "x86_64-conda_cos6-linux-gnu"
        BYTESTR_DEPS = "\"
        CC = "gcc -pthread -B /opt/conda/compiler_compat"
        CCSHARED = "-fPIC"
        CFLAGS = "-Wno-unused-result -Wsign-compare -DNDEBUG -fwrapv -O2 -Wall -fPIC -O2   -isystem /opt/conda/include -fPIC -O2   -isystem /opt/conda/include "
        CFLAGSFORSHARED = ""
        CFLAGS_ALIASING = ""
        CONFIGFILES = "configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in"
        CONFIGURE_CFLAGS = "-fPIC -O2 -isystem /opt/conda/include "
        CONFIGURE_CFLAGS_NODIST = "-fno-semantic-interposition  -g -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration -fvisibility=hidden"
        CONFIGURE_CPPFLAGS = "-DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /opt/conda/include -I/opt/conda/include"
        CONFIGURE_LDFLAGS = "-Wl,-rpath,/opt/conda/lib -Wl,-rpath-link,/opt/conda/lib -L/opt/conda/lib"
        CONFIGURE_LDFLAGS_NODIST = "-fno-semantic-interposition  -g"
        CONFIG_ARGS = "'--prefix=/opt/conda''--build=x86_64-conda_cos6-linux-gnu''--host=x86_64-conda_cos6-linux-gnu''--enable-ipv6''--with-ensurepip=no''--with-tzpath=/opt/conda/share/zoneinfo:/opt/conda/share/tzinfo''--with-computed-gotos''--with-system-ffi''--enable-loadable-sqlite-extensions''--with-tcltk-includes=-I/opt/conda/include''--with-tcltk-libs=-L/opt/conda/lib -ltcl8.6 -ltk8.6''--with-platlibdir=lib''--with-lto''--enable-optimizations''-oldincludedir=/croot/python-split_1694437906621/_build_env/x86_64-conda_cos6-linux-gnu/sysroot/usr/include''--disable-shared''PROFILE_TASK=-m test --pgo''build_alias=x86_64-conda_cos6-linux-gnu''host_alias=x86_64-conda_cos6-linux-gnu''MACHDEP=linux''CC=gcc''CFLAGS= -fPIC -O2  -isystem /opt/conda/include ''LDFLAGS=   -Wl,-rpath,/opt/conda/lib -Wl,-rpath-link,/opt/conda/lib -L/opt/conda/lib''CPPFLAGS=-DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /opt/conda/include -I/opt/conda/include''CPP=/croot/python-split_1694437906621/_build_env/bin/cpp''PKG_CONFIG_PATH=/opt/conda/lib/pkgconfig'"
        CONFINCLUDEDIR = "/opt/conda/include"
        CONFINCLUDEPY = "/opt/conda/include/python3.10"
        COREPYTHONPATH = ""
        COVERAGE_INFO = "/croot/python-split_1694437906621/work/build-static/coverage.info"
        COVERAGE_REPORT = "/croot/python-split_1694437906621/work/build-static/lcov-report"
        COVERAGE_REPORT_OPTIONS = "--no-branch-coverage --title "CPython lcov report""
        CPPFLAGS = "-IObjects -IInclude -IPython -I. -I/croot/python-split_1694437906621/work/Include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /opt/conda/include -I/opt/conda/include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /opt/conda/include -I/opt/conda/include"
        CXX = "g++ -pthread -B /opt/conda/compiler_compat"
        DESTDIRS = "/opt/conda /opt/conda/lib /opt/conda/lib/python3.10 /opt/conda/lib/python3.10/lib-dynload"
        DESTLIB = "/opt/conda/lib/python3.10"
        DESTPATH = ""
        DESTSHARED = "/opt/conda/lib/python3.10/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"
        EXPERIMENTAL_ISOLATED_SUBINTERPRETERS = "0"
        EXPORTSFROM = ""
        EXPORTSYMS = ""
        EXTRATESTOPTS = ""
        EXT_SUFFIX = ".cpython-310-x86_64-linux-gnu.so"
        FILEMODE = "644"
        FLOAT_WORDS_BIGENDIAN = "0"
        FLOCK_NEEDS_LIBBSD = "0"
        GETPGRP_HAVE_ARG = "0"
        GITBRANCH = ""
        GITTAG = ""
        GITVERSION = ""
        GNULD = "no"
        HAVE_ACCEPT4 = "1"
        HAVE_ACOSH = "1"
        HAVE_ADDRINFO = "1"
        HAVE_ALARM = "1"
        HAVE_ALIGNED_REQUIRED = "0"
        HAVE_ALLOCA_H = "1"
        HAVE_ALTZONE = "0"
        HAVE_ASINH = "1"
        HAVE_ASM_TYPES_H = "1"
        HAVE_ATANH = "1"
        HAVE_BIND_TEXTDOMAIN_CODESET = "1"
        HAVE_BLUETOOTH_BLUETOOTH_H = "0"
        HAVE_BLUETOOTH_H = "0"
        HAVE_BROKEN_MBSTOWCS = "0"
        HAVE_BROKEN_NICE = "0"
        HAVE_BROKEN_PIPE_BUF = "0"
        HAVE_BROKEN_POLL = "0"
        HAVE_BROKEN_POSIX_SEMAPHORES = "0"
        HAVE_BROKEN_PTHREAD_SIGMASK = "0"
        HAVE_BROKEN_SEM_GETVALUE = "0"
        HAVE_BROKEN_UNSETENV = "0"
        HAVE_BUILTIN_ATOMIC = "1"
        HAVE_CHFLAGS = "0"
        HAVE_CHOWN = "1"
        HAVE_CHROOT = "1"
        HAVE_CLOCK = "1"
        HAVE_CLOCK_GETRES = "1"
        HAVE_CLOCK_GETTIME = "1"
        HAVE_CLOCK_SETTIME = "1"
        HAVE_CLOSE_RANGE = "0"
        HAVE_COMPUTED_GOTOS = "1"
        HAVE_CONFSTR = "1"
        HAVE_CONIO_H = "0"
        HAVE_COPYSIGN = "1"
        HAVE_COPY_FILE_RANGE = "0"
        HAVE_CRYPT_H = "1"
        HAVE_CRYPT_R = "1"
        HAVE_CTERMID = "1"
        HAVE_CTERMID_R = "0"
        HAVE_CURSES_FILTER = "1"
        HAVE_CURSES_H = "1"
        HAVE_CURSES_HAS_KEY = "1"
        HAVE_CURSES_IMMEDOK = "1"
        HAVE_CURSES_IS_PAD = "1"
        HAVE_CURSES_IS_TERM_RESIZED = "1"
        HAVE_CURSES_RESIZETERM = "1"
        HAVE_CURSES_RESIZE_TERM = "1"
        HAVE_CURSES_SYNCOK = "1"
        HAVE_CURSES_TYPEAHEAD = "1"
        HAVE_CURSES_USE_ENV = "1"
        HAVE_CURSES_WCHGAT = "1"
        HAVE_DECL_ISFINITE = "1"
        HAVE_DECL_ISINF = "1"
        HAVE_DECL_ISNAN = "1"
        HAVE_DECL_RTLD_DEEPBIND = "1"
        HAVE_DECL_RTLD_GLOBAL = "1"
        HAVE_DECL_RTLD_LAZY = "1"
        HAVE_DECL_RTLD_LOCAL = "1"
        HAVE_DECL_RTLD_MEMBER = "0"
        HAVE_DECL_RTLD_NODELETE = "1"
        HAVE_DECL_RTLD_NOLOAD = "1"
        HAVE_DECL_RTLD_NOW = "1"
        HAVE_DECL_TZNAME = "0"
        HAVE_DEVICE_MACROS = "1"
        HAVE_DEV_PTC = "0"
        HAVE_DEV_PTMX = "1"
        HAVE_DIRECT_H = "0"
        HAVE_DIRENT_D_TYPE = "1"
        HAVE_DIRENT_H = "1"
        HAVE_DIRFD = "1"
        HAVE_DLFCN_H = "1"
        HAVE_DLOPEN = "1"
        HAVE_DUP2 = "1"
        HAVE_DUP3 = "1"
        HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH = "0"
        HAVE_DYNAMIC_LOADING = "1"
        HAVE_ENDIAN_H = "1"
        HAVE_EPOLL = "1"
        HAVE_EPOLL_CREATE1 = "1"
        HAVE_ERF = "1"
        HAVE_ERFC = "1"
        HAVE_ERRNO_H = "1"
        HAVE_EVENTFD = "1"
        HAVE_EXECV = "1"
        HAVE_EXPLICIT_BZERO = "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 = "1"
        HAVE_FDOPENDIR = "1"
        HAVE_FDWALK = "0"
        HAVE_FEXECVE = "1"
        HAVE_FINITE = "1"
        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 = "1"
        HAVE_GAI_STRERROR = "1"
        HAVE_GAMMA = "1"
        HAVE_GCC_ASM_FOR_MC68881 = "0"
        HAVE_GCC_ASM_FOR_X64 = "1"
        HAVE_GCC_ASM_FOR_X87 = "1"
        HAVE_GCC_UINT128_T = "1"
        HAVE_GETADDRINFO = "1"
        HAVE_GETC_UNLOCKED = "1"
        HAVE_GETENTROPY = "0"
        HAVE_GETGRGID_R = "1"
        HAVE_GETGRNAM_R = "1"
        HAVE_GETGROUPLIST = "1"
        HAVE_GETGROUPS = "1"
        HAVE_GETHOSTBYNAME = "0"
        HAVE_GETHOSTBYNAME_R = "1"
        HAVE_GETHOSTBYNAME_R_3_ARG = "0"
        HAVE_GETHOSTBYNAME_R_5_ARG = "0"
        HAVE_GETHOSTBYNAME_R_6_ARG = "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_GETPRIORITY = "1"
        HAVE_GETPWENT = "1"
        HAVE_GETPWNAM_R = "1"
        HAVE_GETPWUID_R = "1"
        HAVE_GETRANDOM = "0"
        HAVE_GETRANDOM_SYSCALL = "1"
        HAVE_GETRESGID = "1"
        HAVE_GETRESUID = "1"
        HAVE_GETSID = "1"
        HAVE_GETSPENT = "1"
        HAVE_GETSPNAM = "1"
        HAVE_GETWD = "1"
        HAVE_GLIBC_MEMMOVE_BUG = "0"
        HAVE_GRP_H = "1"
        HAVE_HSTRERROR = "1"
        HAVE_HTOLE64 = "1"
        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 = "0"
        HAVE_LANGINFO_H = "1"
        HAVE_LARGEFILE_SUPPORT = "0"
        HAVE_LCHFLAGS = "0"
        HAVE_LCHMOD = "0"
        HAVE_LCHOWN = "1"
        HAVE_LGAMMA = "1"
        HAVE_LIBDL = "1"
        HAVE_LIBDLD = "0"
        HAVE_LIBIEEE = "0"
        HAVE_LIBINTL_H = "1"
        HAVE_LIBREADLINE = "1"
        HAVE_LIBRESOLV = "0"
        HAVE_LIBSENDFILE = "0"
        HAVE_LIBUTIL_H = "0"
        HAVE_LIBUUID = "1"
        HAVE_LINK = "1"
        HAVE_LINKAT = "1"
        HAVE_LINUX_AUXVEC_H = "1"
        HAVE_LINUX_CAN_BCM_H = "1"
        HAVE_LINUX_CAN_H = "1"
        HAVE_LINUX_CAN_J1939_H = "0"
        HAVE_LINUX_CAN_RAW_FD_FRAMES = "1"
        HAVE_LINUX_CAN_RAW_H = "1"
        HAVE_LINUX_CAN_RAW_JOIN_FILTERS = "1"
        HAVE_LINUX_MEMFD_H = "1"
        HAVE_LINUX_NETLINK_H = "1"
        HAVE_LINUX_QRTR_H = "0"
        HAVE_LINUX_RANDOM_H = "1"
        HAVE_LINUX_TIPC_H = "1"
        HAVE_LINUX_VM_SOCKETS_H = "1"
        HAVE_LINUX_WAIT_H = "1"
        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 = "1"
        HAVE_MKDIRAT = "1"
        HAVE_MKFIFO = "1"
        HAVE_MKFIFOAT = "1"
        HAVE_MKNOD = "1"
        HAVE_MKNODAT = "1"
        HAVE_MKTIME = "1"
        HAVE_MMAP = "1"
        HAVE_MREMAP = "1"
        HAVE_NCURSES_H = "1"
        HAVE_NDIR_H = "0"
        HAVE_NETPACKET_PACKET_H = "1"
        HAVE_NET_IF_H = "1"
        HAVE_NICE = "1"
        HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION = "0"
        HAVE_OPENAT = "1"
        HAVE_OPENPTY = "1"
        HAVE_PATHCONF = "1"
        HAVE_PAUSE = "1"
        HAVE_PIPE2 = "1"
        HAVE_PLOCK = "0"
        HAVE_POLL = "1"
        HAVE_POLL_H = "1"
        HAVE_POSIX_FADVISE = "1"
        HAVE_POSIX_FALLOCATE = "1"
        HAVE_POSIX_SPAWN = "1"
        HAVE_POSIX_SPAWNP = "1"
        HAVE_PREAD = "1"
        HAVE_PREADV = "1"
        HAVE_PREADV2 = "0"
        HAVE_PRLIMIT = "1"
        HAVE_PROCESS_H = "0"
        HAVE_PROTOTYPES = "1"
        HAVE_PTHREAD_CONDATTR_SETCLOCK = "1"
        HAVE_PTHREAD_DESTRUCTOR = "0"
        HAVE_PTHREAD_GETCPUCLOCKID = "1"
        HAVE_PTHREAD_H = "1"
        HAVE_PTHREAD_INIT = "0"
        HAVE_PTHREAD_KILL = "1"
        HAVE_PTHREAD_SIGMASK = "1"
        HAVE_PTY_H = "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 = "1"
        HAVE_SCHED_SETAFFINITY = "1"
        HAVE_SCHED_SETPARAM = "1"
        HAVE_SCHED_SETSCHEDULER = "1"
        HAVE_SEM_CLOCKWAIT = "0"
        HAVE_SEM_GETVALUE = "1"
        HAVE_SEM_OPEN = "1"
        HAVE_SEM_TIMEDWAIT = "1"
        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 = "1"
        HAVE_SETRESUID = "1"
        HAVE_SETREUID = "1"
        HAVE_SETSID = "1"
        HAVE_SETUID = "1"
        HAVE_SETVBUF = "1"
        HAVE_SHADOW_H = "1"
        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 = "1"
        HAVE_SIGWAIT = "1"
        HAVE_SIGWAITINFO = "1"
        HAVE_SNPRINTF = "1"
        HAVE_SOCKADDR_ALG = "1"
        HAVE_SOCKADDR_SA_LEN = "0"
        HAVE_SOCKADDR_STORAGE = "1"
        HAVE_SOCKETPAIR = "1"
        HAVE_SPAWN_H = "1"
        HAVE_SPLICE = "1"
        HAVE_SSIZE_T = "1"
        HAVE_STATVFS = "1"
        HAVE_STAT_TV_NSEC = "1"
        HAVE_STAT_TV_NSEC2 = "0"
        HAVE_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 = "0"
        HAVE_STROPTS_H = "0"
        HAVE_STRSIGNAL = "1"
        HAVE_STRUCT_PASSWD_PW_GECOS = "1"
        HAVE_STRUCT_PASSWD_PW_PASSWD = "1"
        HAVE_STRUCT_STAT_ST_BIRTHTIME = "0"
        HAVE_STRUCT_STAT_ST_BLKSIZE = "1"
        HAVE_STRUCT_STAT_ST_BLOCKS = "1"
        HAVE_STRUCT_STAT_ST_FLAGS = "0"
        HAVE_STRUCT_STAT_ST_GEN = "0"
        HAVE_STRUCT_STAT_ST_RDEV = "1"
        HAVE_STRUCT_TM_TM_ZONE = "1"
        HAVE_SYMLINK = "1"
        HAVE_SYMLINKAT = "1"
        HAVE_SYNC = "1"
        HAVE_SYSCONF = "1"
        HAVE_SYSEXITS_H = "1"
        HAVE_SYS_AUDIOIO_H = "0"
        HAVE_SYS_AUXV_H = "1"
        HAVE_SYS_BSDTTY_H = "0"
        HAVE_SYS_DEVPOLL_H = "0"
        HAVE_SYS_DIR_H = "0"
        HAVE_SYS_ENDIAN_H = "0"
        HAVE_SYS_EPOLL_H = "1"
        HAVE_SYS_EVENTFD_H = "1"
        HAVE_SYS_EVENT_H = "0"
        HAVE_SYS_FILE_H = "1"
        HAVE_SYS_IOCTL_H = "1"
        HAVE_SYS_KERN_CONTROL_H = "0"
        HAVE_SYS_LOADAVG_H = "0"
        HAVE_SYS_LOCK_H = "0"
        HAVE_SYS_MEMFD_H = "0"
        HAVE_SYS_MKDEV_H = "0"
        HAVE_SYS_MMAN_H = "1"
        HAVE_SYS_MODEM_H = "0"
        HAVE_SYS_NDIR_H = "0"
        HAVE_SYS_PARAM_H = "1"
        HAVE_SYS_POLL_H = "1"
        HAVE_SYS_RANDOM_H = "0"
        HAVE_SYS_RESOURCE_H = "1"
        HAVE_SYS_SELECT_H = "1"
        HAVE_SYS_SENDFILE_H = "1"
        HAVE_SYS_SOCKET_H = "1"
        HAVE_SYS_STATVFS_H = "1"
        HAVE_SYS_STAT_H = "1"
        HAVE_SYS_SYSCALL_H = "1"
        HAVE_SYS_SYSMACROS_H = "1"
        HAVE_SYS_SYS_DOMAIN_H = "0"
        HAVE_SYS_TERMIO_H = "0"
        HAVE_SYS_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 = "1"
        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_USABLE_WCHAR_T = "0"
        HAVE_UTIL_H = "0"
        HAVE_UTIMENSAT = "1"
        HAVE_UTIMES = "1"
        HAVE_UTIME_H = "1"
        HAVE_UUID_CREATE = "0"
        HAVE_UUID_ENC_BE = "0"
        HAVE_UUID_GENERATE_TIME_SAFE = "1"
        HAVE_UUID_H = "1"
        HAVE_UUID_UUID_H = "1"
        HAVE_VFORK = "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__GETPTY = "0"
        HOST_GNU_TYPE = "x86_64-conda_cos6-linux-gnu"
        INCLDIRSTOMAKE = "/opt/conda/include /opt/conda/include /opt/conda/include/python3.10 /opt/conda/include/python3.10"
        INCLUDEDIR = "/opt/conda/include"
        INCLUDEPY = "/opt/conda/include/python3.10"
        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 = "libpython3.10.a"
        IO_H = "Modules/_io/_iomodule.h"
        IO_OBJS = "\"
        LDCXXSHARED = "g++ -pthread -B /opt/conda/compiler_compat -shared"
        LDFLAGS = "-Wl,-rpath,/opt/conda/lib -Wl,-rpath-link,/opt/conda/lib -L/opt/conda/lib -Wl,-rpath,/opt/conda/lib -Wl,-rpath-link,/opt/conda/lib -L/opt/conda/lib"
        LDLIBRARY = "libpython3.10.a"
        LDLIBRARYDIR = ""
        LDSHARED = "gcc -pthread -B /opt/conda/compiler_compat -shared  -Wl,-rpath,/opt/conda/lib -Wl,-rpath-link,/opt/conda/lib -L/opt/conda/lib -Wl,-rpath,/opt/conda/lib -Wl,-rpath-link,/opt/conda/lib -L/opt/conda/lib"
        LDVERSION = "3.10"
        LIBC = ""
        LIBDEST = "/opt/conda/lib/python3.10"
        LIBDIR = "/opt/conda/lib"
        LIBFFI_INCLUDEDIR = "/opt/conda/include"
        LIBM = "-lm"
        LIBOBJDIR = "Python/"
        LIBOBJS = ""
        LIBPC = "/opt/conda/lib/pkgconfig"
        LIBPL = "/opt/conda/lib/python3.10/config-3.10-x86_64-linux-gnu"
        LIBPYTHON = ""
        LIBRARY = "libpython3.10.a"
        LIBRARY_DEPS = "libpython3.10.a"
        LIBRARY_OBJS = "\"
        LIBRARY_OBJS_OMIT_FROZEN = "\"
        LIBS = "-lcrypt -lpthread -ldl  -lutil -lm"
        LIBSUBDIRS = "asyncio \"
        LINKCC = "gcc -pthread -B /opt/conda/compiler_compat"
        LINKFORSHARED = "-Xlinker -export-dynamic"
        LIPO_32BIT_FLAGS = ""
        LIPO_INTEL64_FLAGS = ""
        LLVM_PROF_ERR = "no"
        LLVM_PROF_FILE = ""
        LLVM_PROF_MERGER = "true"
        LN = "ln"
        LOCALMODLIBS = ""
        MACHDEP = "linux"
        MACHDEP_OBJS = ""
        MACHDESTLIB = "/opt/conda/lib/python3.10"
        MACOSX_DEPLOYMENT_TARGET = ""
        MAINCC = "gcc -pthread -B /opt/conda/compiler_compat"
        MAJOR_IN_MKDEV = "0"
        MAJOR_IN_SYSMACROS = "0"
        MAKESETUP = "/croot/python-split_1694437906621/work/Modules/makesetup"
        MANDIR = "/opt/conda/share/man"
        MKDIR_P = "/usr/bin/mkdir -p"
        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/symtablemodule.o  Modules/xxsubtype.o"
        MODULE_OBJS = "\"
        MULTIARCH = "x86_64-linux-gnu"
        MULTIARCH_CPPFLAGS = "-DMULTIARCH=\"x86_64-linux-gnu\""
        MVWDELCH_IS_EXPRESSION = "1"
        NO_AS_NEEDED = "-Wl,--no-as-needed"
        OBJECT_OBJS = "\"
        OPENSSL_INCLUDES = "-I/opt/conda/include"
        OPENSSL_LDFLAGS = "-L/opt/conda/lib"
        OPENSSL_LIBS = "-lssl -lcrypto"
        OPENSSL_RPATH = ""
        OPT = "-DNDEBUG -fwrapv -O2 -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-generate"
        PGO_PROF_USE_FLAG = ""
        PLATLIBDIR = "lib"
        POBJS = "\"
        POSIX_SEMAPHORES_NOT_ENABLED = "0"
        PROFILE_TASK = "-m test --pgo"
        PTHREAD_KEY_T_IS_COMPATIBLE_WITH_INT = "1"
        PTHREAD_SYSTEM_SCHED_SUPPORTED = "1"
        PURIFY = ""
        PY3LIBRARY = ""
        PYLONG_BITS_IN_DIGIT = "0"
        PYTHON = "python"
        PYTHONFRAMEWORK = ""
        PYTHONFRAMEWORKDIR = "no-framework"
        PYTHONFRAMEWORKINSTALLDIR = ""
        PYTHONFRAMEWORKPREFIX = ""
        PYTHONPATH = ""
        PYTHON_FOR_BUILD = "./python -E"
        PYTHON_FOR_REGEN = ""
        PYTHON_HEADERS = "\"
        PYTHON_OBJS = "\"
        PY_BUILD_ENVIRON = ""
        PY_BUILTIN_HASHLIB_HASHES = ""md5,sha1,sha256,sha512,sha3,blake2""
        PY_BUILTIN_MODULE_CFLAGS = "-Wno-unused-result -Wsign-compare -DNDEBUG -fwrapv -O2 -Wall   -fPIC  -O2   -isystem /opt/conda/include -fPIC -O2 -isystem /opt/conda/include -fno-semantic-interposition  -g -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration -fvisibility=hidden  -I/croot/python-split_1694437906621/work/Include/internal -IObjects -IInclude -IPython -I. -I/croot/python-split_1694437906621/work/Include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /opt/conda/include -I/opt/conda/include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /opt/conda/include -I/opt/conda/include -DPy_BUILD_CORE_BUILTIN"
        PY_CFLAGS = "-Wno-unused-result -Wsign-compare -DNDEBUG -fwrapv -O2 -Wall -fPIC -O2   -isystem /opt/conda/include -fPIC -O2   -isystem /opt/conda/include "
        PY_CFLAGS_NODIST = "-fno-semantic-interposition   -g -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration -fvisibility=hidden   -I/croot/python-split_1694437906621/work/Include/internal"
        PY_COERCE_C_LOCALE = "1"
        PY_CORE_CFLAGS = "-Wno-unused-result -Wsign-compare -DNDEBUG -fwrapv -O2 -Wall    -fPIC -O2  -isystem /opt/conda/include -fPIC -O2  -isystem /opt/conda/include -fno-semantic-interposition  -g -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration -fvisibility=hidden -I/croot/python-split_1694437906621/work/Include/internal -IObjects -IInclude -IPython -I. -I/croot/python-split_1694437906621/work/Include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /opt/conda/include -I/opt/conda/include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /opt/conda/include -I/opt/conda/include -DPy_BUILD_CORE"
        PY_CORE_LDFLAGS = "-Wl,-rpath,/opt/conda/lib -Wl,-rpath-link,/opt/conda/lib -L/opt/conda/lib -Wl,-rpath,/opt/conda/lib -Wl,-rpath-link,/opt/conda/lib -L/opt/conda/lib -fno-semantic-interposition   -g"
        PY_CPPFLAGS = "-IObjects -IInclude -IPython -I. -I/croot/python-split_1694437906621/work/Include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /opt/conda/include -I/opt/conda/include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /opt/conda/include -I/opt/conda/include"
        PY_ENABLE_SHARED = "0"
        PY_FORMAT_SIZE_T = ""z""
        PY_LDFLAGS = "-Wl,-rpath,/opt/conda/lib -Wl,-rpath-link,/opt/conda/lib -L/opt/conda/lib -Wl,-rpath,/opt/conda/lib -Wl,-rpath-link,/opt/conda/lib -L/opt/conda/lib"
        PY_LDFLAGS_NODIST = "-fno-semantic-interposition   -g"
        PY_SSL_DEFAULT_CIPHERS = "1"
        PY_SSL_DEFAULT_CIPHER_STRING = "0"
        PY_STDMODULE_CFLAGS = "-Wno-unused-result -Wsign-compare -DNDEBUG -fwrapv -O2 -Wall   -fPIC  -O2   -isystem /opt/conda/include -fPIC -O2 -isystem /opt/conda/include -fno-semantic-interposition   -g -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration -fvisibility=hidden  -I/croot/python-split_1694437906621/work/Include/internal -IObjects -IInclude -IPython -I. -I/croot/python-split_1694437906621/work/Include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /opt/conda/include -I/opt/conda/include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /opt/conda/include -I/opt/conda/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 = "readelf"
        RESSRCDIR = "Mac/Resources/framework"
        RETSIGTYPE = "void"
        RUNSHARED = ""
        SCRIPTDIR = "/opt/conda/lib"
        SETPGRP_HAVE_ARG = "0"
        SHELL = "/bin/sh"
        SHLIBS = "-lcrypt -lpthread -ldl  -lutil -lm"
        SHLIB_SUFFIX = ".so"
        SHM_NEEDS_LIBRT = "1"
        SIGNED_RIGHT_SHIFT_ZERO_FILLS = "0"
        SITEPATH = ""
        SIZEOF_DOUBLE = "8"
        SIZEOF_FLOAT = "4"
        SIZEOF_FPOS_T = "16"
        SIZEOF_INT = "4"
        SIZEOF_LONG = "8"
        SIZEOF_LONG_DOUBLE = "16"
        SIZEOF_LONG_LONG = "8"
        SIZEOF_OFF_T = "8"
        SIZEOF_PID_T = "4"
        SIZEOF_PTHREAD_KEY_T = "4"
        SIZEOF_PTHREAD_T = "8"
        SIZEOF_SHORT = "2"
        SIZEOF_SIZE_T = "8"
        SIZEOF_TIME_T = "8"
        SIZEOF_UINTPTR_T = "8"
        SIZEOF_VOID_P = "8"
        SIZEOF_WCHAR_T = "4"
        SIZEOF__BOOL = "1"
        SO = ".cpython-310-x86_64-linux-gnu.so"
        SOABI = "cpython-310-x86_64-linux-gnu"
        SRCDIRS = "Parser Objects Python Modules Modules/_io Programs"
        SRC_GDB_HOOKS = "/croot/python-split_1694437906621/work/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 = "-lm"
        SYS_SELECT_WITH_SYS_TIME = "1"
        TCLTK_INCLUDES = "-I/opt/conda/include"
        TCLTK_LIBS = "-L/opt/conda/lib -ltcl8.6 -ltk8.6"
        TESTOPTS = ""
        TESTPATH = ""
        TESTPYTHON = "./python"
        TESTPYTHONOPTS = ""
        TESTRUNNER = "./python /croot/python-split_1694437906621/work/Tools/scripts/run_tests.py"
        TESTSUBDIRS = "ctypes/test \"
        TESTTIMEOUT = "1200"
        TEST_MODULES = "yes"
        THREAD_STACK_SIZE = "0"
        TIMEMODULE_LIB = "0"
        TIME_WITH_SYS_TIME = "1"
        TM_IN_SYS_TIME = "0"
        TZPATH = "/opt/conda/share/zoneinfo:/opt/conda/share/tzinfo"
        UNICODE_DEPS = "\"
        UNIVERSALSDK = ""
        UPDATE_FILE = "/croot/python-split_1694437906621/work/Tools/scripts/update_file.py"
        USE_COMPUTED_GOTOS = "1"
        VERSION = "3.10"
        VPATH = "/croot/python-split_1694437906621/work"
        WHEEL_PKG_DIR = ""
        WINDOW_HAS_FLAGS = "1"
        WITH_DECIMAL_CONTEXTVAR = "1"
        WITH_DOC_STRINGS = "1"
        WITH_DTRACE = "0"
        WITH_DYLD = "0"
        WITH_EDITLINE = "0"
        WITH_LIBINTL = "0"
        WITH_NEXT_FRAMEWORK = "0"
        WITH_PYMALLOC = "1"
        WITH_VALGRIND = "0"
        X87_DOUBLE_ROUNDING = "0"
        XMLLIBSUBDIRS = "xml xml/dom xml/etree xml/parsers xml/sax"
        abiflags = ""
        abs_builddir = "/croot/python-split_1694437906621/work/build-static"
        abs_srcdir = "/croot/python-split_1694437906621/work"
        base = "/opt/conda"
        datarootdir = "/opt/conda/share"
        exec_prefix = "/opt/conda"
        installed_base = "/opt/conda"
        installed_platbase = "/opt/conda"
        platbase = "/opt/conda"
        platlibdir = "lib"
        prefix = "/opt/conda"
        projectbase = "/opt/conda/bin"
        py_version = "3.10.13"
        py_version_nodot = "310"
        py_version_nodot_plat = ""
        py_version_short = "3.10"
        srcdir = "/opt/conda/lib/python3.10/config-3.10-x86_64-linux-gnu"
        userbase = "/root/.local"

Example pyproject.toml

[tool.poetry]
name = "cleanrl"
version = "2.0.0b1"
description = "High-quality single file implementation of Deep Reinforcement Learning algorithms with research-friendly features"
authors = ["Costa Huang <[email protected]>"]
packages = [
    { include = "cleanrl" },
    { include = "cleanrl_utils" },
]
keywords = ["reinforcement", "machine", "learning", "research"]
license="MIT"
readme = "README.md"

[tool.poetry.dependencies]
python = ">=3.8,<3.11"
tensorboard = "^2.10.0"
wandb = "^0.13.11"
gym = "0.23.1"
torch = ">=1.12.1"
stable-baselines3 = "2.0.0"
gymnasium = ">=0.28.1"
moviepy = "^1.0.3"
pygame = "2.1.0"
huggingface-hub = "^0.11.1"
rich = "<12.0"
tenacity = "^8.2.2"
tyro = "^0.5.10"
pyyaml = "^6.0.1"

ale-py = {version = "0.8.1", optional = true}
AutoROM = {extras = ["accept-rom-license"], version = "~0.4.2", optional = true}
opencv-python = {version = "^4.6.0.66", optional = true}
procgen = {version = "^0.10.7", optional = true}
pytest = {version = "^7.1.3", optional = true}
mujoco = {version = "<=2.3.3", optional = true}
imageio = {version = "^2.14.1", optional = true}
mkdocs-material = {version = "^8.4.3", optional = true}
markdown-include = {version = "^0.7.0", optional = true}
openrlbenchmark = {version = "^0.1.1b4", optional = true}
jax = {version = "0.4.8", optional = true}
jaxlib = {version = "0.4.7", optional = true}
flax = {version = "0.6.8", optional = true}
optuna = {version = "^3.0.1", optional = true}
optuna-dashboard = {version = "^0.7.2", optional = true}
envpool = {version = "^0.6.4", optional = true}
PettingZoo = {version = "1.18.1", optional = true}
SuperSuit = {version = "3.4.0", optional = true}
multi-agent-ale-py = {version = "0.1.11", optional = true}
boto3 = {version = "^1.24.70", optional = true}
awscli = {version = "^1.31.0", optional = true}
shimmy = {version = ">=1.1.0", optional = true}
dm-control = {version = ">=1.0.10", optional = true}
h5py = {version = ">=3.7.0", optional = true}
optax = {version = "0.1.4", optional = true}
chex = {version = "0.1.5", optional = true}
numpy = ">=1.21.6"

[tool.poetry.group.dev.dependencies]
pre-commit = "^2.20.0"

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

[tool.poetry.extras]
atari = ["ale-py", "AutoROM", "opencv-python", "shimmy"]
procgen = ["procgen"]
plot = ["pandas", "seaborn"]
pytest = ["pytest"]
mujoco = ["mujoco", "imageio"]
jax = ["jax", "jaxlib", "flax"]
docs = ["mkdocs-material", "markdown-include", "openrlbenchmark"]
envpool = ["envpool"]
optuna = ["optuna", "optuna-dashboard"]
pettingzoo = ["PettingZoo", "SuperSuit", "multi-agent-ale-py"]
cloud = ["boto3", "awscli"]
dm_control = ["shimmy", "mujoco", "dm-control", "h5py"]

# dependencies for algorithm variant (useful when you want to run a specific algorithm)
dqn = []
dqn_atari = ["ale-py", "AutoROM", "opencv-python"]
dqn_jax = ["jax", "jaxlib", "flax"]
dqn_atari_jax = [
    "ale-py", "AutoROM", "opencv-python", # atari
    "jax", "jaxlib", "flax" # jax
]
c51 = []
c51_atari = ["ale-py", "AutoROM", "opencv-python"]
c51_jax = ["jax", "jaxlib", "flax"]
c51_atari_jax = [
    "ale-py", "AutoROM", "opencv-python", # atari
    "jax", "jaxlib", "flax" # jax
]
ppo_atari_envpool_xla_jax_scan = [
    "ale-py", "AutoROM", "opencv-python", # atari
    "jax", "jaxlib", "flax", # jax
    "envpool", # envpool
]
qdagger_dqn_atari_impalacnn = [
    "ale-py", "AutoROM", "opencv-python"
]
qdagger_dqn_atari_jax_impalacnn = [
    "ale-py", "AutoROM", "opencv-python", # atari
    "jax", "jaxlib", "flax", # jax
]
[[tool.poetry.source]]
name = "aliyun"
url = "https://mirrors.aliyun.com/pypi/simple"
priority = "primary"

Poetry Runtime Logs

Super large. Can not upload. generated via `poetry install -vvv | tee /tmp/p.log`

root@dsw-498793-6c5c78668-ps57p:/tmp# ll -trh
总计 132M
drwxr-xr-x  1 root root 4.0K  Jan  6 09:21 ../
drwx------  2 root root 4.0K  Jan  6 13:57 tmpfbxagxq5_kernels/
-rw-r--r--  1 root root    0  Jan  6 13:57 wow_what_a_coincidence
-rw-------  1 root root    0  Jan  6 13:57 stdout-stderr---supervisor-oi3so2gc.log
drwx------ 33 root root  12K  Jan  6 13:57 _MEIZhlMUp/
drwx------  3 root root 4.0K  Jan  6 13:57 tmp9omelb31/
-rw-------  1 root root  30K  Jan  6 15:05 stdout-stdout---supervisor-zagcr3vz.log
srwxr-xr-x  1 root root    0  Jan  6 15:05 vscode-ipc-8702339b-3baa-4dfe-8dfd-26f2b4d1d897.sock=
srwxr-xr-x  1 root root    0  Jan  6 15:05 vscode-git-8511e23733.sock=
drwxrwxrwx  5 root root 4.0K  Jan  6 15:33 ./
-rw-r--r--  1 root root 132M  Jan  6 15:34 p.log
@ace-han ace-han added kind/bug Something isn't working as expected status/triage This issue needs to be triaged labels Jan 6, 2025
@dimbleby
Copy link
Contributor

dimbleby commented Jan 6, 2025

poetry 1.8.5 also takes a long time to resolve this one for me.

most likely all that has happened is that the cache format has changed in the new release, so poetry 2.0 cannot use your poetry 1.8.5 cache. In that case the second and subsequent runs will be fast again.

@ace-han
Copy link
Author

ace-han commented Jan 6, 2025

poetry 1.8.5 also takes a long time to resolve this one for me.

most likely all that has happened is that the cache format has changed in the new release, so poetry 2.0 cannot use your poetry 1.8.5 cache. In that case the second and subsequent runs will be fast again.

@dimbleby I was setting up a brand new docker env (no poetry installed before), so the situation you mentioned is not my case.
I tried installing 1.8.5 in another pod instance(dsw-498899-84cf4b4bc5-hg2qz) without poetry installed (2.0.0 was tried in dsw-498793-6c5c78668-ps57p), so that the installation got done in less than 5 minutes

@dimbleby
Copy link
Contributor

dimbleby commented Jan 6, 2025

well then I do not reproduce: poetry 1.8.5 also takes a long time to resolve this one for me (with an empty cache).

I see no difference in the new release.

@dimbleby
Copy link
Contributor

dimbleby commented Jan 6, 2025

either way the usual problem in such cases is awscli / boto3 / botocore - Amazon like to release thousands of versions of the last of these, which can cause resolvers to have to do a lot of backtracking.

Probably if you raise the lower bounds on Amazon-ecosystem dependencies that will reduce your exposure to this.

@dimbleby
Copy link
Contributor

dimbleby commented Jan 6, 2025

Take it back, this actually is a regression - though one complicated by the problem being slow to solve even without the change.

Here is a simplified repro:

[tool.poetry]
name = "foo"
version = "1.0.0"
description = ""
authors = []
keywords = []
license = "MIT"
readme = "README.md"

[tool.poetry.dependencies]
python = ">=3.8,<3.11"
opencv-python = {version = "^4.6.0.66", optional = true}
ale-py = { version = "0.8.1", optional = true }

[tool.poetry.extras]
extra01 = ["ale-py"]
extra02 = ["ale-py"]
extra03 = ["ale-py"]
extra04 = ["ale-py"]
extra05 = ["ale-py"]
extra06 = ["ale-py"]
extra07 = ["ale-py"]
extra08 = ["ale-py"]
extra09 = ["ale-py"]
extra10 = ["ale-py"]
extra11 = ["ale-py"]
extra12 = ["ale-py"]
extra13 = ["ale-py"]
extra14 = ["ale-py"]

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

and we are getting stuck in the new code that wants to maintain markers during resolution so that it can write them to the lock file #9427. Because: the markers that we calculate are long and unwieldy, and converting them to and from CNF and DNF is exponentially expensive

@radoering

@aliberts
Copy link

aliberts commented Jan 10, 2025

Can confirm there seems to be some regression going on.

When generating the lock file from the following pyproject.toml, it takes about 39s with poetry 1.8.5 using poetry lock. Generating the lock file from the same pyproject.toml, poetry lock --regenerate was still running when I killed it at around 1800s (30mn).

Poetry Installation Method: pipx
Operating System: MacOS 15.2
Poetry Version: 2.0.0
Poetry Config:

cache-dir = "/Users/simon/Library/Caches/pypoetry"
installer.max-workers = null
installer.no-binary = null
installer.only-binary = null
installer.parallel = true
installer.re-resolve = true
keyring.enabled = true
requests.max-retries = 0
solver.lazy-wheel = true
system-git-client = false
virtualenvs.create = true
virtualenvs.in-project = null
virtualenvs.options.always-copy = false
virtualenvs.options.no-pip = false
virtualenvs.options.system-site-packages = false
virtualenvs.path = "{cache-dir}/virtualenvs"  # /Users/simon/Library/Caches/pypoetry/virtualenvs
virtualenvs.prompt = "{project_name}-py{python_version}"
virtualenvs.use-poetry-python = false

pyproject.toml
[tool.poetry]
name = "lerobot"
version = "0.1.0"
description = "🤗 LeRobot: State-of-the-art Machine Learning for Real-World Robotics in Pytorch"
authors = [
    "Rémi Cadène <[email protected]>",
    "Simon Alibert <[email protected]>",
    "Alexander Soare <[email protected]>",
    "Quentin Gallouédec <[email protected]>",
    "Adil Zouitine <[email protected]>",
    "Thomas Wolf <[email protected]>",
]
repository = "https://github.com/huggingface/lerobot"
readme = "README.md"
license = "Apache-2.0"
classifiers=[
    "Development Status :: 3 - Alpha",
    "Intended Audience :: Developers",
    "Intended Audience :: Education",
    "Intended Audience :: Science/Research",
    "Topic :: Software Development :: Build Tools",
    "Topic :: Scientific/Engineering :: Artificial Intelligence",
    "License :: OSI Approved :: Apache Software License",
    "Programming Language :: Python :: 3.10",
]
packages = [{include = "lerobot"}]


[tool.poetry.dependencies]
python = ">=3.10,<3.13"
termcolor = ">=2.4.0"
omegaconf = ">=2.3.0"
wandb = ">=0.16.3"
imageio = {extras = ["ffmpeg"], version = ">=2.34.0"}
gdown = ">=5.1.0"
hydra-core = ">=1.3.2"
einops = ">=0.8.0"
pymunk = ">=6.6.0"
zarr = ">=2.17.0"
numba = ">=0.59.0"
torch = ">=2.2.1"
opencv-python = ">=4.9.0"
diffusers = ">=0.27.2"
torchvision = ">=0.17.1"
h5py = ">=3.10.0"
huggingface-hub = {extras = ["hf-transfer", "cli"], version = ">=0.25.2"}
gymnasium = "==0.29.1" # TODO(rcadene, aliberts): Make gym 1.0.0 work
cmake = ">=3.29.0.1"
gym-dora = { git = "https://github.com/dora-rs/dora-lerobot.git", subdirectory = "gym_dora", optional = true }
gym-pusht = { version = ">=0.1.5", optional = true}
gym-xarm = { version = ">=0.1.1", optional = true}
gym-aloha = { version = ">=0.1.1", optional = true}
pre-commit = {version = ">=3.7.0", optional = true}
debugpy = {version = ">=1.8.1", optional = true}
pytest = {version = ">=8.1.0", optional = true}
pytest-cov = {version = ">=5.0.0", optional = true}
datasets = ">=2.19.0"
imagecodecs = { version = ">=2024.1.1", optional = true }
pyav = ">=12.0.5"
rerun-sdk = ">=0.15.1"
deepdiff = ">=7.0.1"
flask = ">=3.0.3"
pandas = {version = ">=2.2.2", optional = true}
scikit-image = {version = ">=0.23.2", optional = true}
dynamixel-sdk = {version = ">=3.7.31", optional = true}
pynput = {version = ">=1.7.7", optional = true}
feetech-servo-sdk = {version = ">=1.0.0", optional = true}
setuptools = {version = "!=71.0.1", optional = true}  # TODO(rcadene, aliberts): 71.0.1 has a bug
pyrealsense2 = {version = ">=2.55.1.6486", markers = "sys_platform != 'darwin'", optional = true}  # TODO(rcadene, aliberts): Fix on Mac
pyrender = {git = "https://github.com/mmatl/pyrender.git", markers = "sys_platform == 'linux'", optional = true}
hello-robot-stretch-body = {version = ">=0.7.27", markers = "sys_platform == 'linux'", optional = true}
pyserial = {version = ">=3.5", optional = true}
jsonlines = ">=4.0.0"


[tool.poetry.extras]
dora = ["gym-dora"]
pusht = ["gym-pusht"]
xarm = ["gym-xarm"]
aloha = ["gym-aloha"]
dev = ["pre-commit", "debugpy"]
test = ["pytest", "pytest-cov", "pyserial"]
umi = ["imagecodecs"]
video_benchmark = ["scikit-image", "pandas"]
dynamixel = ["dynamixel-sdk", "pynput"]
feetech = ["feetech-servo-sdk", "pynput"]
intelrealsense = ["pyrealsense2"]
stretch = ["hello-robot-stretch-body", "pyrender", "pyrealsense2", "pynput"]

[tool.ruff]
line-length = 110
target-version = "py310"
exclude = [
    "tests/data",
    ".bzr",
    ".direnv",
    ".eggs",
    ".git",
    ".git-rewrite",
    ".hg",
    ".mypy_cache",
    ".nox",
    ".pants.d",
    ".pytype",
    ".ruff_cache",
    ".svn",
    ".tox",
    ".venv",
    "__pypackages__",
    "_build",
    "buck-out",
    "build",
    "dist",
    "node_modules",
    "venv",
]


[tool.ruff.lint]
select = ["E4", "E7", "E9", "F", "I", "N", "B", "C4", "SIM"]


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

@radoering
Copy link
Member

You may try #10018. As you can see in the PR description it does not fix the regression, it only mitigates it. The performance might be enough for simpler cases. However, it is also possible that it makes no relevant difference for your use case...

@radoering
Copy link
Member

After investigating the issue a little further, it seems like the performance regression can be fixed (at least for the simplified repro) if we improve extra handling in _merge_single_markers, i.e. support AtomicMultiMarker and AtomicMarkerUnion for extra markers. However, this is a bit tricky without breaking things and requires additional unit tests. I will take a look but it may take a while.

@aliberts
Copy link

@radoering thank you for this update.
I've tried 2.0.1 but doesn't seem to fix it, poetry lock --regenerate was still running after 20mn (with the above pyproject.toml I mentioned)

@radoering
Copy link
Member

With python-poetry/poetry-core#818, at least the simple repro from #9956 (comment) is almost as fast as before.

@aliberts You can try the main branch of Poetry if you like. (It should be significantly faster than 2.0.1 but it might still be slower than 1.8.)

@radoering
Copy link
Member

@aliberts You can try the main branch of Poetry if you like. (It should be significantly faster than 2.0.1 but it might still be slower than 1.8.)

Or better wait for python-poetry/poetry-core#821. This should make it about as fast as with 1.8. (See PR description.)

@axellpadilla
Copy link

Hi, I must add another case that running poetry 2.0.1 also takes forever on repo https://github.com/dlt-hub/dlt
But on 1.8 it takes no time.

Hope it helps for another case to test after new changes:

@aliberts You can try the main branch of Poetry if you like. (It should be significantly faster than 2.0.1 but it might still be slower than 1.8.)

Or better wait for python-poetry/poetry-core#821. This should make it about as fast as with 1.8. (See PR description.)

@radoering
Copy link
Member

I checked the examples mentioned in this issue with the main branch of poetry (and poetry-core) and there still seems to be a regression in some use cases:

#9956 (comment):

poetry version lock (--regenerate) lock (--no-update)
1.8 215 s 25 s
main >400 s 5 s

#9956 (comment):

poetry version lock (--regenerate) lock (--no-update)
1.8 0.8 s 0.2 s
main 0.8 s 0.3 s

#9956 (comment):

poetry version lock (--regenerate) lock (--no-update)
1.8 201 s 18 s
main 60 s 7.5 s

#9956 (comment):

poetry version lock (--regenerate) lock (--no-update)
1.8 1040 s 107 s
main >1400 s recursion error after 200 s

At first glance, it looks like the resolver takes different routes, but I still do not know why. (#8256 was long before Poetry 1.8)

@radoering
Copy link
Member

After having investigated the recursion error mentioned in my previous comment, I got some new insights:

The recursion error

The recursion error is caused by python-poetry/poetry-core#821 and will be fixed by python-poetry/poetry-core#832.

The resolver taking another route

The resolver takes a different route because of

if self._env is None and package.is_root() and dep.in_extras:
# The clone is required for installation with re-resolving
# without an existing lock file because the root package is used
# once for solving and a second time for re-resolving for installation.
dep = dep.clone()
dep.marker = dep.marker.intersect(
parse_marker(
" or ".join(f'extra == "{extra}"' for extra in dep.in_extras)
)
)
introduced in #9553. Before, the following duplicates were merged:

psycopg2-binary >= 2.9.1
psycopg2-binary >= 2.9.0

With the change the duplicates become:

psycopg2-binary >= 2.9.1; extra == "postgres" or extra == "redshift" or extra == "postgis"
psycopg2-binary >= 2.9.0

and are not merged anymore causing an early split in the dependency graph. While this can lead to more accurate results, it can take quite a lot of time.

Avoiding unnecessary overrides

While searching the recursion error, I noticed that we often raise OverrideNeededError with only one override, which is quite unnecessary. This will be fixed in #10138, which finally fixes the performance regression for the last example, although the resolver still takes a more expensive route:

poetry version lock (--regenerate) lock (--no-update)
1.8 1040 s 107 s
main with mentioned PRs 441 s 35 s

Open points

The performance regression of the first example is still present. This might also be caused by #9553 but needs to be investigated further.

@dimbleby
Copy link
Contributor

dimbleby commented Feb 2, 2025

The original example looks vulnerable to the usual Amazon ecosystem nonsense.

If you have reached the point where that is happening then it is likely time just to advise that OP should tighten the allowed range of awscli / boto versions.

@radoering
Copy link
Member

The original example looks vulnerable to the usual Amazon ecosystem nonsense.

It is - and #9553 disturbs the balance in this case.

With Poetry 1.8, urllib3 is chosen after boto3 because both have an AnyMarker and boto3 has more candidates.

With Poetry 2.0, urllib3 is chosen before boto3 because urllib3 has still an AnyMarker, but boto3 has an extra marker.

We could fiddle with

def _get_min(dependency: Dependency) -> tuple[bool, int, int]:

At first, I thought to take is_specific_marker out of the equation because

However, it seems to increase the time to resolve the last example significantly (> 100 s).

Another option might be

- is_specific_marker = not dependency.marker.is_any()
+ is_specific_marker = not dependency.marker.without_extras().is_any()

This should mostly restore the 1.8 heuristics. This also reduces the time to resolve the first example to 20 s. However, it still slows down the last example by about 50 s.

This all feels a bit like gambling although it makes a little sense to me to ignore extra markers when choosing the next package.

What do you think @dimbleby? Keep it as is or does any change in the heuristics make sense to you?

@radoering
Copy link
Member

@axellpadilla Btw, you can reduce the time for locking if you use the same constraint in https://github.com/dlt-hub/dlt/blob/9ea3812d67ed3e94ae9cb59f86c66384a443eb0d/pyproject.toml#L64 and https://github.com/dlt-hub/dlt/blob/9ea3812d67ed3e94ae9cb59f86c66384a443eb0d/pyproject.toml#L282 (in case the difference is not important to you).

@dimbleby
Copy link
Contributor

dimbleby commented Feb 2, 2025

My instinct would be towards simplification. The is_specific_marker bit looks not particularly well justified: I could easily believe that fixes since then have made it redundant. So if it is a "win some, lose some" situation - I would lean towards removing that code altogether.

There are always going to be cases where (eg) a boto3 dependency is discovered relatively late in the search, after we have already chosen (eg) a recent urllib3. Making sensible efforts to handle the obvious or common examples is good, but I would not want to try too hard to tune heuristics to specific examples.

Sometimes the best answer is just going to be "if you want a faster solve, please make your constraints less relaxed"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/bug Something isn't working as expected status/triage This issue needs to be triaged
Projects
None yet
Development

No branches or pull requests

5 participants